实体框架 - 在多对多关系中添加两次相同的实体

时间:2011-08-25 13:24:09

标签: entity-framework many-to-many duplicates

确定。所以这里是交易。我有两个实体 - "产品"和"零件"。该产品由零件组成。零件可在其他产品中重复使用。这些实体之间的关系是多对多的。这一切都很棒。

问题我无法将同一部件添加到同一产品两次。 EF似乎迫使所有相关实体都是唯一的。请考虑以下代码:

var product = context.Create<Product>();
var part = GetSomePart();

Console.WriteLine(product.Parts.Count); // will output 0

// Add a part
product.Parts.Add(part);
Console.WriteLine(product.Parts.Count); // will output 1

// Add the same part again
product.Parts.Add(part);
Console.WriteLine(product.Parts.Count); // will output 1!

好吧,我明白了 - 避免重复或其他什么。但我需要这是可能的。有没有办法做到这一点(告诉EF停止强制执行唯一值)而不创建额外的表?或者解决这个问题的唯一方法是手动添加中间表并自己处理多对多?

2 个答案:

答案 0 :(得分:2)

在这种情况下,您将需要创建另一个名为“ProductParts”的表,该表将具有标识唯一键,并且可以包含对产品和部件的引用,它们也可以是多个。

答案 1 :(得分:0)

在第二个add语句中,它不会添加另一个对象,因为part已经处于添加状态。所以你需要创建一个具有相同属性的新对象再次添加它。

product.Parts.Add(new Part{someProperty=part.someProperty ... ect });

如果您想减少代码,可以使用Automapper(http://automapper.codeplex.com/)复制所有属性,

 product.Parts.Add(Mapper.Map<Part,Part>(part));