嵌入式 RavenDB 出现“找不到事务存储类型”错误

Posted

技术标签:

【中文标题】嵌入式 RavenDB 出现“找不到事务存储类型”错误【英文标题】:"Could not find transactional storage type" error with embedded RavenDB 【发布时间】:2011-07-25 17:01:05 【问题描述】:

我能够根据以下位置的代码成功运行 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

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

    \RavenDB-Build-309\EmbeddedClient\Raven.Client.Embedded.dll \RavenDB-Build-309\Client\Raven.Client.Lightweight.dll \RavenDB-Build-309\EmbeddedClient\Raven.Storage.Esent.dll \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);

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

【问题讨论】:

你在这里发帖吗? groups.google.com/group/ravendb/topics 不,但我也会在那里发帖 @Derek 我遇到了与 288 相同的错误 我想你仍然只指定 DocumentStore,我会看看什么时候可以上 PC。 就在我脑海中的一个遥远的地方,但是你有一个配置文件说明选择的引擎应该是 Esent 吗?可嵌入的应该只是托管引擎还是我错了? 【参考方案1】:

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

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

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

-- 普拉纳夫

【讨论】:

似乎必须将 Raven.Storage.Esent 的引用添加到测试项目中,以测试更新文档存储的类。我在编写第一个开始玩 raven 的测试时遇到了同样的问题。 有人知道这是什么原因吗?是否有解决方法,因此不需要将其添加到其他项目中?【参考方案2】:

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

【讨论】:

Thnx,我不知道为什么第一次没有包含它,因为它已经在项目中引用了,但是我做了一个新的发布,现在需要的一切都在那里。

以上是关于嵌入式 RavenDB 出现“找不到事务存储类型”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Windows Azure 上嵌入的 RavenDB 写入日志文件失败

寻找有关嵌入式 .NET 数据库(例如 db4o、NHibernate 或 RavenDB)的指导

如何在共享主机环境中运行 RavenDB?

写入 RavenDb 后立即读取它会返回不一致的数据

安装 RavenDb Embedded 时出现 Nuget 依赖错误

RavenDB 使用 Raven.Smuggler 在 RavenDB 服务器之间导出/导入数据