2016-11-01 111 views
1

我是使用RavenDB的新手。 我的理解是我們必須先創建一個DocumentStore,然後打開一個會話才能將數據保存到數據庫中。 從文檔中,我明白我們不應該每次都創建實例,並且應該只使用singleton來創建DocumentStore。 但我意識到大多數文檔或教程只是演示每次創建實例。RavenDB的單身人士DocumentStore

僅供參考,我正在使用ASP.NET MVC框架。

所以在這裏我的問題是,

  1. 在哪個文件夾應該CreatingDocumentStore.cs(Singleton類)是 放在哪裏?在應用程序文件夾的根目錄中?
  2. 創建這個單例類後,如何使用它?

下面是使用Singleton之前我的AdminController的原始代碼。我不知道如何改變它,以便使用單例類 - CreatingDocumentStore.cs

如果有人可以通過顯示代碼演示使用Singleton,我將不勝感激。提前致謝!

AdminController.cs控制器中的文件夾

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

那你究竟想達到通過添加'使用'在克雷亞蒂的街區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東西的文件夾。

您可以從計算器檢查這些帖子: