1

我不确定自己的文字是否正确(这可能是我努力寻找结果的原因)。EF代码优先的对称关系

这里就是我想要实现:

我希望能够可以添加相关产品(产品B,产品C)产品A的集合,我想它因此,当您查看产品B时,相关产品会反映A上添加的内容(如您在产品A和产品C中看到的一样)。 是否必须为“相关”关系提供单独的表格?我猜测有一个简单的方法来做到这一点。

public class Product 
{ 
    public int ProductId { get; set; } 
    public string DefinitionUri { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 

    public virtual ICollection<Product> RelatedProducts { get; set; } 
} 
+0

这不就是一个类似'ProductGroup'的产品分组吗? (所以,一个独立的实体) – 2013-02-21 09:25:09

+0

我并没有真的想创建一个产品组来放置产品。我希望管理员和算法能够关联产品(对称)并能够简单访问它们(如我可以访问RelatedProducts属性)并且高效(不需要在每次访问属性时根据其他属性“查找”相关产品)。 – 2013-07-28 23:31:51

回答

0

我猜你正在尝试做的是类似于你看到在amazon.com上什么情况下,如果打开一本书,它会给你相关的书籍来看看。如果我正确猜测,那么这是一个多对多的关系,因为每个产品都可能与许多其他产品相关,所以现在Entity Framework Code First通过约定支持多对多关系,并创建一个连接表自动。现在我还没有尝试过两个相关的对象都是同一类型的(在你的例子中是“Product”),所以你将不得不检查这个结果是否成立。另一方面,我不认为这是应该实现这个功能的方式,我认为你必须使用某种数据挖掘技术,我会为Google做些什么,看看专业人员如何实现这一功能。

+0

创建一个连接表并有一个不对称的“相关产品”关系很容易,但我希望它是对称的(我的第二段对此有所了解)。我将研究数据挖掘技术 - 但这听起来有点可怕,因为我正在研究什么是相对较小的特征。虽然谢谢! – 2013-07-28 23:35:20

+0

@NickDarvey你能找到你需要的答案吗?我有同样的问题,但无法找到它。由Gert Arnold提供的解决方案恰恰是“不对称”的情况,对吧? – tyron 2014-12-17 16:19:51

+0

@tyron我还没有看过这个,所以没有我没有找到解决方案,我现在有点远离实体框架,对不起。 – 2014-12-17 16:25:05

0

您可以像定义它一样使用属性,但应该告诉EF它是多对多关联,例如,像这样:

entry.HasMany(p => p.RelatedProducts) 
    .WithMany() 
    .Map(m => m.MapLeftKey("ProductId") 
       .MapRightKey("ProductIdReleated")); 

现在Ef中会创建两个FKS到Product结合表。如果没有这个映射,它将创建一个表,其中FK对应自己,即1-n关联。