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