3

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

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

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

为什么 Product 应该同时具有制造商 ID 和对制造商的引用?它与延迟加载有关吗?

4

1 回答 1

2

这真的回到了实体框架的故事:在 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 代码首先将识别ManufacturerIdManufacturer导航属性的 FK,并将基于数据库中的 FK 创建关系。

顺便说一句,它与延迟加载没有任何关系,只要您像在模型中所做的那样将导航属性标记为虚拟属性,延迟加载无论有无 FK 都可以工作。

于 2010-12-05T20:42:59.000 回答