我是使用RavenDB的新手。 我的理解是我们必须首先创建一个DocumentStore,然后打开一个会话以便将数据保存到数据库中。 从文档中,我了解到我们不应该每次都创建实例,并且应该只使用单例来创建DocumentStore。 但我意识到大多数文档或教程每次只演示创建实例。
仅供参考,我正在使用ASP.NET MVC框架。
所以这是我的问题,
以下是使用Singleton之前我的AdminController的原始代码。我不知道如何更改它以使用单例类 - CreatingDocumentStore.cs
如果有人可以通过显示代码来演示使用Singleton,我将不胜感激。提前致谢!
Controller文件夹中的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 :(得分: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中查看这些帖子: