我无法将EF4解决方案迁移到EF6。
我们使用T4模板生成具有基于ObservableCollection<的导航属性的持久无知POCO。 T>
因为我们的ObjectContext实现将实体集公开为IObjectSet<实体GT;我们从ObjectQuery中丢失了Include()方法,因此必须在IQueryable上使用扩展方法来重新获取它,如下所示:
public static IQueryable<TSource> Include<TSource>(this IQueryable<TSource> source, string path)
{
IQueryable<TSource> returnValue = source;
var objectQuery = source as ObjectQuery<TSource>;
if (objectQuery != null)
{
returnValue = objectQuery.Include(path);
}
return returnValue;
}
更新解决方案以使用EF6后,我们现在在使用.Include()执行查询时看到以下System.Data.Entity.Core.EntityException: -
“'DataEntities.Parent'类型的实体上的导航属性'Details'必须实现ICollection&lt; T&gt;,以便Entity Framework能够跟踪集合中的更改。”
我没有得到的是'Details'属性是一个自定义类型,它继承了ObservableCollection&lt; T&GT;这是一个ICollection&lt; T>,那么为什么声明它的异常必须实现ICollection&lt; T&GT;
如果有人对此有所了解,我将不胜感激,谢谢。
答案 0 :(得分:0)
正如本blogpost of an EF team member
所述您的类必须遵循以启用更改跟踪代理的规则是非常严格和限制性的。这限制了您如何定义实体并阻止使用私有属性甚至私有设置器等内容。
规则是:
this answer解释了为什么你不能使用你的实现。