Одна из долгожданных функций Entity Framework 4 - это возможность использовать POCO (простые старые объекты CLR) без знания персистентности (т. Е. Они не «знают», что они сохраняются с помощью Entity Framework по сравнению с каким-либо другим механизмом. ).
Я пытаюсь понять, почему необходимо выполнять исправления ассоциаций и использовать FixupCollection в моем «простом» бизнес-объекте. Это требование, по-видимому, подразумевает, что бизнес-объект не может в конце концов полностью игнорировать механизм персистентности (на самом деле слово «исправление» звучит так, будто что-то нужно исправить / изменить для работы с выбранным механизмом постоянства).
В частности, я имею в виду область исправлений ассоциации, созданную 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?