如何将EF4 Code-First ICollection转换为EntityCollection?

时间:2011-02-17 22:58:54

标签: c# entity-framework-4 code-first entitycollection

说我有以下实体:

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

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

不幸的是,如果我尝试从ICollection<T>EntityCollection<T>进行直接广告投放,由于Comments属性为System.Collections.Generic.List<T>而我得到一个例外无法转换为EntityCollection<T>

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

2 个答案:

答案 0 :(得分:2)

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

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

Using CreateSourceQuery in CTP4 Code First

答案 1 :(得分:0)

只要您的POCO类符合requirements for change tracking proxy creation,代理就会用EntityCollection对象替换ICollection属性。乍一看,您的课程符合这些要求,但您还应确保将the ProxyCreationEnabled option设置为true。