2

假设我有以下实体:

public class Post
{
    public int Id { get; set; }
    public virtual ICollection<Comment> Comments { get; set; }
}

当我从数据库中检索 Post 对象时,我需要将Comments集合转换为一个EntityCollection<T>,以便我可以检查有关集合的一些 EF4 相关数据,例如数据是否已预先加载。

不幸的是,如果我尝试从ICollection<T>to直接转换EntityCollection<T>,我会得到一个异常,因为该Comments属性是 aSystem.Collections.Generic.List<T>并且不能转换为 a EntityCollection<T>

那么在使用代码优先时如何获取有关集合的 EF 信息?

4

2 回答 2

2

这可能更适合作为评论,但我希望 EF4 大师能够对此做出回应并解释发生了什么。我刚才在 CTP4 上问了下面的问题。一个回应来自 EF 4 recipes 的作者,他说在运行时集合将被创建为 EntityCollection,如果它被声明为虚拟和 ICollection(发问者显然正在这样做)这显然不会发生。

此外,Rowan Miller(EF4 团队的成员)写了一个更高级的选项,提问者之前曾表示该选项不起作用。这里发生了什么?当前的 CTP 不支持这个,而之前的 CTP 支持吗?

首先在 CTP4 代码中使用 CreateSourceQuery

于 2011-02-17T23:58:10.367 回答
0

只要您的 POCO 类满足更改跟踪代理创建的要求,代理就会将 ICollection 属性替换为 EntityCollection 对象。乍一看,您的类满足这些要求,但您还应确保将 ProxyCreationEnabled 选项设置为 true。

于 2012-03-28T19:06:00.610 回答