这真的回到了实体框架的故事:在 EF1 中,我们只有独立关联,这意味着 FK(例如 ManufacturerId)没有暴露在依赖对象(例如 Product)上,您只使用导航属性(例如 Manufacturer)。在 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; }
}
有趣的一点是,按照惯例,EF 代码首先将识别ManufacturerId
为Manufacturer
导航属性的 FK,并将基于数据库中的 FK 创建关系。
顺便说一句,它与延迟加载没有任何关系,只要您像在模型中所做的那样将导航属性标记为虚拟属性,延迟加载无论有无 FK 都可以工作。