大家好,
我尝试在 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
分为两个实体:ProductDefinition
、ProductInstance
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/