我是使用RavenDB的新手。我所理解的是,我们必须首先创建一个DocumentStore,然后打开一个会话,以便将数据保存到数据库。从文档中,我明白我们不应该每次都创建实例,应该只使用singleton来创建DocumentStore。但我意识到大多数文档或教程只演示每次创建实例。
仅供参考,我正在使用ASP。。NET MVC框架。
我的问题来了,
- CreatingDocumentStore.cs (Singleton类)应该在哪个文件夹放置?在应用程序文件夹的根目录? 在创建了这个单例类之后,如何使用它?
下面是我的AdminController在使用Singleton之前的原始代码。我不知道如何改变它,以使用单例类- CreatingDocumentStore.cs
如果有人能通过展示代码来演示如何使用Singleton,我将不胜感激。提前感谢!AdminController.cs inController folder
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
}
正如Ayende不久前在他的博客上发表的管理RavenDB文档存储启动:
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查看这些帖子:
如何使RavenDB DocumentStore可用于调用api
RavenDB- Building Session Factory, singleton DocumentStore
嵌入式RavenDb的单例