Dot-Net
模型命名空間更改後,RavenDB 拋出強制轉換異常
在數據庫中,我已經儲存了數百個文件。現在系統架構發生了變化,並且(除其他外)模型被遷移到不同的命名空間(在不同的程序集中)。
下面顯示了範例文件的元數據:
和我用來獲取此類文件的程式碼:
var configuration = documentSession.Load<One.Social.Core.Entities.Setting>("Setting");拋出鑄造異常:
[InvalidCastException: Unable to cast object of type 'One.QA.Core.Entities.Setting' to type 'One.Social.Core.Entities.Setting'.]更新:
類似的錯誤,但來自 NewtonsoftJson 上升,而我在文件中收集了指定類型,現在已更改。
在數據庫中,我有問題文件,其中包含答案列表:
在程式碼中,類型如下所示:
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; } } }答案命名空間已更改。另外,現在它是從 IList<> 派生的,沒有 ICollection<>。我現在不需要
$type元數據,它應該是:
.
雖然它現在是一個列表,但由於舊
$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'.遷移所有文件以反映目前類型名稱的最佳方法是什麼?有沒有內置機制?
順便說一句:我正在使用 RavenDB - Build #960
Jarek,問題的原因是你有兩種類型。如果您刪除 QA 類型,它將正常工作。或者,您可以按照 Wyatt 的建議進行操作並強制執行此操作。
我遇到了同樣的問題,最終這樣做了:
Advanced.DatabaseCommands.UpdateByIndex( "Raven/DocumentsByEntityName", new IndexQuery {Query = "Tag:Album"}, new []{ new PatchRequest() { Type = PatchCommandType.Modify, Name = "@metadata", Nested= new []{ new PatchRequest{ Name= "Raven-Clr-Type", Type = PatchCommandType.Set, Value = "Core.Model.Album, Core" }}}}, false);


.