RavenDB 的单例文档存储



我是使用RavenDB的新手。我所理解的是,我们必须首先创建一个DocumentStore,然后打开一个会话,以便将数据保存到数据库。从文档中,我明白我们不应该每次都创建实例,应该只使用singleton来创建DocumentStore。但我意识到大多数文档或教程只演示每次创建实例。

仅供参考,我正在使用ASP。。NET MVC框架。

我的问题来了,

  1. CreatingDocumentStore.cs (Singleton类)应该在哪个文件夹放置?在应用程序文件夹的根目录?
  2. 在创建了这个单例类之后,如何使用它?

下面是我的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的单例

相关内容

  • 没有找到相关文章

最新更新