首先是EF代码中的对称关系

时间:2013-02-21 09:01:07

标签: entity-framework ef-code-first code-first poco self-reference

我不确定我的措辞是否正确(这可能就是我努力寻找结果的原因)。

这就是我想要实现的目标:

我希望能够将相关产品(产品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; }
}

2 个答案:

答案 0 :(得分:0)

我猜你要做的事情与你在amazon.com上看到的相似,如果你打开一本书,它会给你相关的书籍。如果我猜对了,那么这是你要配置的多对多关系,因为每个产品都可能与许多其他产品相关,现在Entity Framework Code First通过约定支持多对多关系并创建一个连接表自动。现在我还没有尝试过两个相关对象的类型相同(在你的情况下是“产品”),所以你必须检查一下这是否有效。在旁注中,我认为这不是应该实现此功能的方式,我认为您必须使用某种数据挖掘技术,我会谷歌为此,并看看专业人士如何实现此功能。

答案 1 :(得分:0)

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

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

现在,Ef将创建一个包含两个FK到Product的联结表。如果没有这种映射,它将创建一个Product表,其中包含一个FK,即1-n个关联。