2016-11-01 4 views
1

Я новичок в использовании RavenDB. Я понимаю, что мы должны сначала создать DocumentStore, а затем открыть сеанс, чтобы сохранить данные в базе данных. Из документации я понимаю, что мы не должны создавать экземпляр каждый раз и должны использовать singleton для создания DocumentStore. Но я понял, что большая часть документации или учебников только демонстрационно создает экземпляр каждый раз.RavenDB singleton DocumentStore

FYI, Я использую ASP.NET MVC framework.

Так вот идет мой вопрос,

  1. В какой папке должны CreatingDocumentStore.cs (Singleton класс) быть помещен ? В корне папки приложения?
  2. После создания этого одноэлементного класса, как его использовать?

Ниже приведен оригинальный код моего AdminController перед использованием Singleton. И я не знаю, как изменить его, чтобы использовать класс singleton - CreateDocumentStore.cs

Я был бы очень признателен, если кто-то сможет продемонстрировать использование Singleton, показывая код. Заранее спасибо!

AdminController.cs в папке Controller

public class AdminController : Controller 
{ 

    public ActionResult Index() 
    { 

     using (var store = new DocumentStore 
     { 
      Url = "http://localhost:8080/", 
      DefaultDatabase = "foodfurydb" 
     }) 
     { 
      store.Initialize(); 

      using (var session = store.OpenSession()) 
      { 
       session.Store(new Restaurant 
       { 
        RestaurantName = "Boxer Republic", 
        ResCuisine = "Western", 
        ResAddress = "Test Address", 
        ResCity = "TestCity", 
        ResState = "TestState", 
        ResPostcode = 82910, 
        ResPhone = "02-28937481" 
       }); 

       session.SaveChanges(); 

      } 
     } 

     return View(); 
    } 

    public ActionResult AddRestaurant() 
    { 
     return View(); 
    } 
} 

CreatingDocumentStore.cs в корневой папке

public class CreatingDocumentStore 
{ 
    public CreatingDocumentStore() 
    { 
     #region document_store_creation 
     using (IDocumentStore store = new DocumentStore() 
     { 
      Url = "http://localhost:8080" 
     }.Initialize()) 
     { 

     } 
     #endregion 
    } 

    #region document_store_holder 
    public class DocumentStoreHolder 
    { 
     private static Lazy<IDocumentStore> store = new Lazy<IDocumentStore>(CreateStore); 

     public static IDocumentStore Store 
     { 
      get { return store.Value; } 
     } 

     private static IDocumentStore CreateStore() 
     { 
      IDocumentStore store = new DocumentStore() 
      { 
       Url = "http://localhost:8080", 
       DefaultDatabase = "foodfurydb" 
      }.Initialize(); 

      return store; 
     } 
    } 
    #endregion 
} 
+0

Что вы точно хотите достичь, добавив, что 'с помощью 'блок в' Creati ngDocumentStore'? Он немедленно удалит ваш магазин, так как управление оставляет конструктор. –

ответ

1

Как Ayende разместил на своем блоге некоторое время назад Managing RavenDB Document Store startup:

Хранилище документов RavenDB является вашей основной точкой доступа к базе данных . Настоятельно рекомендуется, чтобы у вас был всего один экземпляр хранилища документов на каждый сервер, к которому вы обращаетесь. То, что обычно означает, что вам нужно реализовать одноэлементный, со всеми двойной проверенной блокировкой ерунды, которая в этом участвует.

Он показывает нам пример:

public static class Global 
{ 
    private static readonly Lazy<IDocumentStore> theDocStore = new Lazy<IDocumentStore>(()=> 
     { 
      var docStore = new DocumentStore 
       { 
        ConnectionStringName = "RavenDB" 
       }; 
      docStore.Initialize(); 

      //OPTIONAL: 
      //IndexCreation.CreateIndexes(typeof(Global).Assembly, docStore); 

      return docStore; 
     }); 

    public static IDocumentStore DocumentStore 
    { 
     get { return theDocStore.Value; } 
    } 
} 

Где вы собираетесь разместить его, зависит от вашей архитектуры. Обычно мы размещаем database соединения и т. Д. В Infrastructure. Если у вас есть один проект, вы можете поместить его в корневой каталог проекта или создать папку, содержащую database.

Вы можете проверить эти сообщения от StackOverflow:

 Смежные вопросы

  • Нет связанных вопросов^_^