使用 执行 EF6 查询时引发的实体异常.包括()
本文关键字:异常 实体 包括 EF6 执行 查询 使用 | 更新日期: 2023-09-27 18:37:22
我在将 EF4 解决方案迁移到 EF6 时遇到问题。
我们使用 T4 模板生成具有基于 ObservableCollection
因为我们的 ObjectContext 实现将实体集公开为 IObjectSet<实体>所以我们从 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 后,我们现在在使用 执行查询时看到以下系统.数据.实体.核心.实体异常。包括() :-
"类型为'DataEntities.Parent'的实体上的导航属性'详细信息'必须实现 ICollection
我没有得到的是"Details"属性是一个继承 ObservableCollection
如果有人对此有任何了解,我将不胜感激,谢谢。
如EF团队成员的这篇博文中所述
您的类必须遵循的规则才能启用更改跟踪代理,这些规则非常严格且有限制性。这限制了定义实体的方式,并阻止使用私有属性甚至私有资源库等内容。
规则是:
- 该类必须是公开的,而不是密封的。
- 所有属性都必须具有公共/受保护的虚拟getter,并且制定。
- 集合导航属性必须声明为 ICollection。它们不能是 IList、List、HashSet 等。
这个答案解释了为什么你不能使用你的实现。