Entity Framework 4的一个备受期待的特性是能够以不知道持久性的方式使用POCO(普通的旧CLR对象)(即,它们不“知道”它们是用Entity Framework持久化的,而不是其他机制持久化的)。
我在想为什么有必要在我的“普通”业务对象中执行关联修复和使用FixupCollection。这个要求似乎意味着业务对象毕竟不能完全不知道持久性机制(事实上,“fixup”这个词听起来像是需要修复/修改一些东西才能使用所选的持久性机制)。
具体来说,我指的是由
ADO.NET POCO实体生成器
,例如:
#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的使用。其他常见的持久性表单没有类似的限制。
这在实践中是如何实现的,端到端的?例如,我知道最近才为ObservaleCollection添加了支持(Silverlight和WPF需要它)。其他软件层是否与EF兼容的POCO对象的设计要求有矛盾?