模型命名空间更改后,RavenDB会抛出转换异常

jwa*_*zko 11 .net ravendb

在数据库中,我已经存储了数百个文档.现在,系统架构已经发生了变化,并且(其中)模型被迁移到不同的命名空间(在不同的程序集中).

下面显示了示例文档的元数据:

在此输入图像描述

和代码我用来获取这样的文件:

var configuration = documentSession.Load<One.Social.Core.Entities.Setting>("Setting");
Run Code Online (Sandbox Code Playgroud)

抛出铸造异常:

[InvalidCastException: Unable to cast object of type 'One.QA.Core.Entities.Setting' to type 'One.Social.Core.Entities.Setting'.]
Run Code Online (Sandbox Code Playgroud)

更新:

类似的错误但是从NewtonsoftJson上升,而我在dosument里面有指定类型的集合,现在已经改变了.

在数据库中我有问题文档,其中包含一个答案列表:

在此输入图像描述

在代码中,类型看起来像这样:

namespace One.Social.Ask.Web.Models
{
    public class Question
    {        
        public string Content { get; set; }
        public IList<One.Social.Ask.Web.Models.Answer> Answers { get; set; }        
    }
}
Run Code Online (Sandbox Code Playgroud)

Answers命名空间已更改.另外,现在它来自IList <>,没有ICollection <>.我现在不需要$typemeta,它应该是:

在此输入图像描述.

虽然它现在是一个列表,但由于旧$type信息,错误会增加:

Newtonsoft.Json.JsonSerializationException: Error resolving type specified in JSON 'System.Collections.ObjectModel.Collection`1[[One.QA.Core.Entities.Answer, One.QA.Core]], mscorlib'. ---> Newtonsoft.Json.JsonSerializationException: Could not find type 'System.Collections.ObjectModel.Collection`1[[One.QA.Core.Entities.Answer, One.QA.Core]]' in assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
Run Code Online (Sandbox Code Playgroud)

迁移所有文档以反映当前类型名称的最佳方法是什么?有内置机制吗?

顺便说一下:我正在使用RavenDB - Build#960

Aye*_*ien 3

Jarek,问题的原因是你有两种类型。如果删除 QA 类型,它就会正常工作。或者,您可以按照怀亚特的建议进行操作并强制执行此操作。