我有一些从数据库中获取的 .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()-ed 或 AddObject()-ed 到任何上下文。
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()
问题:我现在的表中有两倍的匹配行