У меня есть несколько объектов инфраструктуры сущностей .NET 4, которые я получаю из БД, затем я сериализую их в XML. Затем я закрываю приложение WPF (очищаю память). Затем я перезапускаю приложение WPF и читаю их (десериализацию) обратно в список <>, но никогда не присоединяю их к какому-либо контексту 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, объекты никогда не присоединяются () - 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 () в контексте
ПРОБЛЕМА: у меня теперь в два раза больше совпадающих строк в моей таблице