entity-framework-4.1 - Entity Framework - 使用 Code First 的复杂模型

标签 entity-framework-4.1 ef-code-first poco

大家好,

我尝试在 POCO 类中创建一个非常具体的数据模型,并且尝试了很多不同的方法并访问了很多网站,但似乎没有一个网站涵盖了我的具体示例。

所以我要把这个扔出去,希望有人能帮助我。

我有产品,并且产品有成分。但在我们的业务中,这些产品可以由不同的供应商提供,每个供应商的成分略有不同。

所以我有了我的基类:

public class Product
{  
    public int ProductID { get; set; }
    public string ProductNumber { get; set; }
    public string Description { get; set; }
    public virtual ICollection<Supplier> Suppliers { get; set; }
}

public class Vendor
{
    public int VendorID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Supplier> Suppliers { get; set; }
}

public class Ingredient
{
    public int IngredientID { get; set; }        
    public string Name { get; set; }
}

public class Supplier
{
    public int SupplierID { get; set; }

    public virtual ICollection<Product> Products { get; set; }
    public virtual ICollection<Vendor> Vendors { get; set; }
}

正如您所看到的,我已经意识到我的模型需要一个连接实体,因为我的成分来自产品的特定供应商,我需要称为供应商的连接实体(我认为)。

这就是我陷入困境的地方......我的产品可以由一个或多个供应商提供。每个供应商的每种产品都会有该产品的成分列表

我什至无法弄清楚是否需要连接实体。

如果我能够像这样(或类似的东西)导航数据结构,那就太棒了:

articles[1].Vendors[3].Ingredients;

再说一遍,我对 Entity Framework 了解不够,不知道这是否可行。

我现在的做法感觉……不对。做我想做的事情的正确方法是什么?我是否需要连接表,或者我可以以某种方式导航产品供应商的成分,也许使用模型构建器来使产品->供应商->成分链接成为必需的?

任何帮助将不胜感激!

编辑: 我也觉得我对Entity Framework的关系思想理解不够。

所以一个产品可以有多个供应商,这是一对多的关系。但一个供应商可以有很多产品。那么这实际上是多对多吗?

我绝对可以对我想要在 SQL Express 服务器上执行的操作进行建模,但我确实想使用 Entity Framework 。我只是需要更好地了解我的建模要求。

最佳答案

不是EF的问题。这是常见的实体关系任务。您必须简单地改进您的模型。例如,您可以将 Product 分为两个实体:ProductDefinitionProductInstance

public class ProductDefinition
{  
    public int ProductID { get; set; }
    public string ProductNumber { get; set; }
    public string Description { get; set; }
    public virtual ICollection<ProductInstance> Instances { get; set; }
}


public class ProductInstance
{
    public int ProductInstanceID { get; set; }
    public virtual Supplier Supplier { get; set; }
    public virtual ProductDefinition Definition { get; set; }
    public vritual ICollection<Ingredient> Ingredients { get; set; }
}

在您的系统中,您将使用 ProductDefinition 而不是原始的 Product。这个定义就像一组相同的产品,它指向不同供应商提供的具有不同成分的产品的所有可能的制造。

我不知道你的背景,但将不同成分的产品算作“相同”似乎很奇怪。

关于entity-framework-4.1 - Entity Framework - 使用 Code First 的复杂模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9408512/

相关文章:

entity-framework-4.1 - Entity Framework 4.1 自定义数据库初始化器策略

c# - 如何为 LINQ 查询构建动态 FROM 子句?

poco - 什么是 POCO 代理?

c# - EF 4 和 POCO 的最佳实践/入门解决方案

sql-server - 如何从 Entity Framework 访问FileTables?

c# - 与 ObjectContext 相比,为什么在 EF 4.1 中插入实体这么慢?

linq - 我应该将 DDD 聚合根存储库与 EF 4.1 + LINQ 一起使用吗?

entity-framework - 外键必需的属性

entity-framework - 列名无效

entity-framework - EF Code First - 如何设置身份增量