EF 4.1 Codefirst:实例化复杂的导航属性

时间:2011-09-18 11:29:28

标签: entity-framework-4 ef-code-first

想象为EF 4.1 Codefirst设置一个简单的POCO:

public class Product
{
    // Native properties 
    [Key]
    public Guid ID { get; set; }

    // Navigation properties
    public virtual Category Category { get; set; }
    public virtual ICollection<Customer> Customers { get; set; }

    public Product()
    {
        this.ID = Guid.NewGuid();

        // Do I have to instantiate navigation properties in the constructor or not???
        this.Category = new Category();
        this.Customers = new List<Customer>();
    }
}

到目前为止我无法弄清楚的是我是否应该在POCO的构造函数中实例化复杂的导航属性?

如果我没有实例化,似乎我当前的所有代码都在工作,但我担心我的代码将来可能会导致问题。

是否有任何规则,最佳做法或任何副作用?

感谢您的想法和提示!

1 个答案:

答案 0 :(得分:3)

您无需实例化Category。类别是存在与否的单个实体 - 产品不对其创建负责。您可能需要将Customers实例化为空列表。

它现在起作用的原因是因为你的上下文将使用动态代理包装实体,动态代理将处理你Customers集合的实例化。因为其他代码可以访问集合而不接收NullReferenceException。如果您在代码中创建Product的实例而不使用EF,则可能会发生这种情况。在这种情况下,将没有动态代理,您的集合将为null =您必须自己实例化。