データベースには、すでに何百ものドキュメントが保存されています。今度は、システムアーキテクチャが変更され、(他のものの中でも)モデルが(異なるアセンブリ内の)異なる名前空間に移行されました。以下は モデルネームスペースの変更後に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'.]
更新日:
私はdosntの中に指定された型のコレクションを持っていますが、シンプルなエラーですが、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を使用しています - あなたはそれらをデシリアライズしようとせずに直接ravendb文書にパッチを適用する必要があります#960
ありがとう、確かに私は2番目のタイプがありました。削除後、ravenはドキュメントメタ情報を現在のタイプ "Raven-Clr-Type": "One.Social.Ask.Web.Models.Setting、One.Social.Ask.Web"に自動的に変更しました。あなたは私の質問の更新を見ることができますか?私は別の同様の問題があります。 – jwaliszko
これは正しいです。私の問題を解決しました:) Ayendeありがとうございます –
私はRavenDB Studioからドキュメントを削除することもできない同じ問題を抱えています。これは古いclr-typeがまだプラグインに存在していたためです!私はravendbを停止し、プラグインを削除し、ravendbを再起動し、スタジオ経由ですべての文書を削除してから、再度ravendbを停止してプラグインを再インストールし、再度ravendbを起動しなければなりません。 – ldx