【发布时间】:2014-04-02 18:24:19
【问题描述】:
这是场景: 我有一个产品表和一个类别表。这种关系是多对多的:一个类别可以有 1 个或多个产品....而一个产品可以属于 1 个或多个类别...
Code-First 映射如下所示......
public class Product
{
//...additional properties...
public virtual ICollection<Category> AssociatedCategories {get; set;}
}
public class Category
{
//...additional properties...
public virtual ICollection<Product> AssociatedProducts {get; set;}
}
现在,在底层,实体框架将创建一个名为 ProductCategory 的连接表,其中包含 ProductID 和 CategoryID 列。太好了....
事情是这样的,我需要介绍一个排序顺序……基本上只是一个基本的定位索引,但是这个数字只存在于产品和类别相互交汇的关系中。例如,产品 X 在类别 Y 中的排序顺序值可能为“5”,但某些产品 X 可能在类别 Z 中具有不同的排序值,例如 10。
当然,我可以专门为这种类型的东西创建一个实体...但它需要创建一个新表...类别 ID、产品 ID 和排序顺序将有 3 列。我真正想做的是利用实体框架已经制作的表格......它已经在连接表中跟踪产品ID和类别ID......有什么办法可以制作使用已经存在的表?
【问题讨论】:
-
您必须在类模型中创建一个实体,否则 EF 将永远无法读取排序顺序。不用担心。在大多数实际应用中,纯连接表迟早会变成学术抽象。此外,当联结是一个实体时,您可以更有效地操纵关联。
-
如果您不将其存储在某处,我不确定您打算如何为不同的产品设置排序顺序,因此您需要将该列添加到表中。
-
谢谢@GertArnold...我很好奇您所说的...“当连接是一个实体时,您可以更有效地操纵关联”...您就是这样谈论类似于 Dismissile 使用 fluent API 发布的内容?
-
我的意思是您可以自己创建/删除关联记录,即使从未从数据库中获取
Product或Category。对于多对多,您总是需要完整的对象来操作关联。
标签: c# entity-framework e-commerce entity-framework-6