EF4 Code-First:在设置关联时包含或不包含模型中的外键

时间:2010-12-05 19:52:53

标签: entity-framework reference entity-framework-4 poco code-first

在一些Code-First EF4演练中,您在定义POCO时会看到这样的模式:

public class Product
{
    public int ID { get; set; }

    public int ManufacturerId { get; set; }
    public virtual Manufacturer Manufacturer { get; set; }
}

为什么Product既有ManufacturerId又有制造商参考?是否与延迟加载有关?

1 个答案:

答案 0 :(得分:2)

它真正回到了实体框架的故事:在EF1中,我们只有独立协会意味着FK(例如ManufacturerId)没有暴露在依赖对象(例如产品)上,而你只能工作具有导航属性(例如制造商)。 在EF4中引入了一种新类型的关联:外键关联其中FK在模型中浮出水面,您可以直接使用它们。

所以,下面仍然是一个完全有效的模型,但它是EF1风格(即独立协会):

public class Product {
    public int ID { get; set; }
    public virtual Manufacturer Manufacturer { get; set; }
}

也就是说,建议始终在对象中包含外键,因为它为您提供了使用对象模型的最大灵活性:

public class Product {
    public int ID { get; set; }
    public int ManufacturerId { get; set; }
    public virtual Manufacturer Manufacturer { get; set; }
}

有趣的是,by convention,EF代码首先会将ManufacturerId识别为Manufacturer导航属性的FK,并将根据数据库中的关系创建关系。 / p> 顺便说一句,它与延迟加载没有任何关系,只要你将导航属性标记为模拟中的 vitual ,延迟加载就可以使用或不使用FK。