Одной из долгожданных особенностей Entity Framework 4 является возможность использовать POCO (простые старые объекты CLR) способом невосприимчивости к постоянству (то есть они не «знают», что они сохраняются с Entity Framework против какой-то другой механизм).
Я пытаюсь понять, почему необходимо выполнять исправления ассоциаций и использовать FixupCollection в моем «простом» бизнес-объекте. Это требование, по-видимому, подразумевает, что бизнес-объект не может полностью игнорировать механизм персистентности (на самом деле слово «fixup» звучит так, как будто что-то нужно исправить / изменить для работы с выбранным механизмом персистентности).
В частности, я имею в виду регион Исправления ассоциации, созданный ADO.NET POCO Entity Generator , например ::
#region Association Fixup
private void FixupImportFile(ImportFile previousValue)
{
if (previousValue != null && previousValue.Participants.Contains(this))
{
previousValue.Participants.Remove(this);
}
if (ImportFile != null)
{
if (!ImportFile.Participants.Contains(this))
{
ImportFile.Participants.Add(this);
}
if (ImportFileId != ImportFile.Id)
{
ImportFileId = ImportFile.Id;
}
}
}
#endregion
, а также использование FixupCollection. Другие распространенные невежественные ORM не имеют подобных ограничений.
Это связано с фундаментальными проектными решениями в EF? Есть ли здесь какой-то уровень невежества, чтобы остаться даже в более поздних версиях EF? Есть ли умный способ скрыть эту постоянную зависимость от разработчика POCO?
Как это работает на практике, сквозное? Например, я понимаю, что поддержка ObservableCollection была добавлена только недавно (что необходимо для Silverlight и WPF). Есть ли ошибки в других уровнях программного обеспечения из требований к проектированию EF-совместимых объектов POCO?