17

我能够根据以下代码成功运行 RavenDB 的简单测试:http ://ravendb.net/tutorials/hello-world

接下来我尝试以嵌入式方式运行它,但我不断收到以下错误:

Message: Could not find transactional storage type: Raven.Storage.Esent.TransactionalStorage, Raven.Storage.Esent  
StackTrace:    at Raven.Database.Config.InMemoryRavenConfiguration.CreateTransactionalStorage(Action notifyAboutWork) in c:\Builds\raven\Raven.Database\Config\InMemoryRavenConfiguration.cs:line 272
   at Raven.Database.DocumentDatabase..ctor(InMemoryRavenConfiguration configuration) in c:\Builds\raven\Raven.Database\DocumentDatabase.cs:line 109
   at Raven.Client.Client.EmbeddableDocumentStore.InitializeInternal() in c:\Builds\raven\Raven.Client.Embedded\EmbeddableDocumentStore.cs:line 130
   at Raven.Client.Document.DocumentStore.Initialize() in c:\Builds\raven\Raven.Client.Lightweight\Document\DocumentStore.cs:line 388
   at Tests.RavenEmbedded.RavenDB..ctor() in C:\Users\Pranav\Documents\Projects\Repositories-Clone\Common-clone\Tests\RavenDB.cs:line 114
   at Tests.TestRavenDB.Basics() in C:\Users\Pranav\Documents\Projects\Repositories-Clone\Common-clone\Tests\RavenDB.cs:line 170 

设置:

目标框架是.NET Framework 4

我在我的项目中添加了以下引用:

  1. \RavenDB-Build-309\EmbeddedClient\Raven.Client.Embedded.dll
  2. \RavenDB-Build-309\Client\Raven.Client.Lightweight.dll
  3. \RavenDB-Build-309\EmbeddedClient\Raven.Storage.Esent.dll
  4. \RavenDB-Build-309\EmbeddedClient\Raven.Storage.Managed.dll

代码是:

命名空间 Tests.RavenEmbedded
{
    使用 Raven.Client.Client;
    使用 Raven.Client.Document;
    使用 Raven.Storage.Esent;
    使用 Raven.Storage.Managed;
    使用 Tests.RavenData;

    RavenDB 类
    {
        公共 RavenDB()
        {
            // EmbeddableDocumentStore store = new EmbeddableDocumentStore { DataDirectory = @"C:\Temp\RavenData" };
            //Raven.Storage.Esent.TransactionalStorage
            var store = new EmbeddableDocumentStore { DataDirectory = @"C:\Temp\RavenData" };
            商店.初始化();

            #region 写入数据
            使用 (var session = store.OpenSession())
            {
                var 产品 = 新产品
                {
                    成本 = 3.99m,
                    名称=“牛奶”,
                };
                session.Store(产品);
                session.SaveChanges();

                session.Store(新订单
                {
                    客户=“客户/ayende”,
                    订单行 =
                      {
                          新订单行
                          {
                              产品 ID = 产品 ID,
                              数量 = 3
                          },
                      }
                });
                session.SaveChanges();
            }
            #endregion

            #region 读取数据
            使用 (var session = store.OpenSession())
            {
                var order = session.Load("orders/1");
                Debug.Print("客户:{0}", order.Customer);
                foreach (var orderLine in order.OrderLines)
                {
                    Debug.Print("Product: {0} x {1}", orderLine.ProductId, orderLine.Quantity);
                }
                session.SaveChanges();
            }

            #endregion

        }
    }
}

命名空间测试
{
    公共类 TestRavenDB
    {
        公共静态无效基础()
        {
            尝试
            {
                //var db = new RavenClientServer.RavenDB();
                var db = new RavenEmbedded.RavenDB();
            }
            捕捉(例外前)
            {

                Debug.Print("消息:{0}",ex.Message);
                Debug.Print("StackTrace: {0} ",ex.StackTrace);

            }
        }

    }
}

我已经尝试搜索了几天,也尝试了一些不同的变体。我不确定发生了什么。

4

2 回答 2

17

感谢 groups.google.com/group/ravendb/topics 上的 Ayende Rahien。

解决方案是将“Raven.Storage.Esent”引用添加到主项目。这是 Visual Studio 和间接引用的问题。

感谢@Derek 建议我在那里发帖。

-- 普拉纳夫

于 2011-03-31T12:56:43.030 回答
5

您需要添加对 Raven.Storage.Esent.dll 的引用

于 2011-09-06T10:58:49.843 回答