DB から取得した .NET 4 エンティティ フレームワーク オブジェクトがいくつかあり、それらを XML にシリアル化します。次に、WPF アプリを終了します (メモリをクリアします)。次に、WPF アプリを再起動し、それらを読み取り (逆シリアル化) して List<> に戻しますが、それらを EF コンテキストにアタッチすることはありません。オブジェクト コンテキストで SaveChanges() を呼び出すと、重複するレコードが作成されますが、逆シリアル化されたものをコンテキストにアタッチしたことがないため、新しいコンテキストがレコードのコピーを作成する理由がわかりません。これは自己追跡エンティティhttp://msdn.microsoft.com/en-us/library/ff407090.aspxと関係がありますか?
ここにレビューがあります...
アプリを起動
オブジェクトを ObjectSet.ToList() _cachedRates にクエリします
IQueryable<Rate> query = DB.EF.Rates.Where({some predicates});
if (query != null && query.Count() > 0)
_cachedRates = query.ToList();
XML にシリアライズ
XmlSerializer serializer = new XmlSerializer(_cachedRates.GetType());
TextWriter textWriter = new StreamWriter(saveDialog.FileName);
serializer.Serialize(textWriter, _cachedRates);
textWriter.Close();
アプリを閉じる
...{後で}...
アプリを再起動する
XML ファイルからオブジェクトをロードします。オブジェクトは、どのコンテキストに対しても Attach() または AddObject() されません。
if (openDialog.ShowDialog().Value)
{
_cachedRates = null;
XmlSerializer deserializer = new XmlSerializer(typeof(List<Rate>));
TextReader textReader = new StreamReader(openDialog.FileName);
_cachedRates = (List<Rate>)deserializer.Deserialize(textReader);
textReader.Close();
}
ユーザーが「保存」ボタンを押すと、コンテキストで .SaveChanges() が呼び出されます
問題: テーブルに一致する行が 2 倍になりました