在一些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又有制造商参考?是否与延迟加载有关?
答案 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。