名称';NodaTimeField';在RavenDB上安装索引期间,当前上下文错误中不存在

名称';NodaTimeField';在RavenDB上安装索引期间,当前上下文错误中不存在,ravendb,nodatime,Ravendb,Nodatime,我正在RavenDB索引中使用NodaTime的LocalDate。 以下是索引的一个示例: public class TaskIndex : AbstractIndexCreationTask<ScheduleTask> { public TaskIndex() { Map = tasks => from task in tasks select new { tas

我正在RavenDB索引中使用NodaTime的LocalDate。 以下是索引的一个示例:

public class TaskIndex : AbstractIndexCreationTask<ScheduleTask>
{
    public TaskIndex()
    {
        Map = tasks => from task in tasks
            select new
            {
                task.Name,
                PlannedStartDate = task.PlannedStartDate.AsLocalDate().Resolve(),
                PlannedDueDate = task.PlannedDueDate.AsLocalDate().Resolve()
            };

        Index(x => x.Name, FieldIndexing.Analyzed);
        Store(x => x.Name, FieldStorage.Yes);
        TermVector(x => x.Name, FieldTermVector.WithPositionsAndOffsets);
    }
}
documentStore
配置了默认数据库,但我使用它来安装不同(租户)数据库名的索引,该数据库名在
dbName

在安装索引期间,我遇到了一个异常:
名称“NodaTimeField”在当前上下文中不存在

我有一个默认数据库,它和我试图为其安装索引的数据库完全不同。所以基本上这个案例和前面描述的类似,但我使用的是RavenDB服务器的独立版本

我试图找出我能做的事情,但没能做到:

embeddableDocumentStore.ServerIfEmbedded.Options.DatabaseLandlord.SetupTenantConfiguration += configuration =>
            {
                configuration.Catalog.Catalogs.Add(new TypeCatalog(typeof(DeleteOnConflict)));
                configuration.Catalog.Catalogs.Add(new TypeCatalog(typeof(PutOnConflict)));
            };
我使用的RavenDB版本是2.5.2956。
RavenDB.Client.NodaTime-2.5.10


希望你的帮助。谢谢。

我相信答案是您的租户数据库没有“激活”捆绑包。您的数据库文档(在Raven 3的“设置”下)应该有类似的内容

"Raven/ActiveBundles": "Encryption;Compression;NodaTime"
你也必须打电话

store.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);

我在store.Initialize()之后调用它。完成这两项工作后,可能需要通过重新保存文档来修复现有数据(不确定是否有其他方法)。新数据将以“2016-2-3”格式正确存储,这将使您的索引返回数据。

在我的情况下,这是一个非常愚蠢的错误。不久前,当我安装RavenDB服务器时,我将其安装到了非默认目标中。后来一些RavenDB更新被安装到默认目标(即
\ProgramFiles(x86)\RavenDB
)。当我安装RavenDB节点时间包时,我将其放入了错误的目标(
\Program Files(x86)\RavenDB

检测到此问题并在正确的目的地正确配置RavenDB服务器后,标题中描述的错误消失了

希望这个答案能帮助别人


p.S.后来,在从数据库读取数据时出现反序列化错误(RavenDB不知道如何将日期从
“yyyy-MM-dd”
格式的字符串反序列化为
LocalDate
对象),我通过调用
store.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb)修复了该错误
store.Initialize()之后按his中的建议打电话。

我会调查。谢谢。这可能是因为我使用的RavenDB版本太旧了吗?我试图在RavenDB存储库中找到一些与租户配置相关的内容,我可以看到,虽然主分支中存在一些类,但在2.5分支中不存在这些类。例如,在此路径下有一些与租赁管理相关的类(如databaselown.cs和其他),但它们在2.5 branch中不存在。@MattJohnson-很抱歉让您感到困惑。那都是我的错。
store.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);