添加相同对象时的EntityFrameWork ICollection Code First Issue

时间:2015-01-08 23:10:28

标签: c# entity-framework-6

我使用以下2个Model类创建了一个代码第一个数据库。

public class Product
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }
}

public class ProductCollection
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Product> Products { get; set; }

 }

现在我有以下通用存储库(仅显示相关方法)

public class EntityRepository<T> : IRepository<T> where T : class
{
    protected DatabaseContext database;

    public EntityRepository(DatabaseContext database)
    {
        this.database = database;
    }

    public T Add(T t)
    {
        database.Set<T>().Add(t); 
        database.SaveChanges();
        return t;
    }

}

现在,当我创建一个ProductCollection A并添加产品B时,它会像它应该的那样添加。 现在,当我创建一个ProductCollection C并添加相同的产品B时,它会被添加,但会从ProductCollection A中删除。

代码:

ProductCollection productCollection = new ProductCollection()
{
    Name = "Apple Collection",
    Products = new Collection<Product>() {
        productRepository.Get(1)
    },
};

this.productCollectionRepository.Add(productCollection);

Trace.WriteLine(productCollection.Products.Count); // PRINTS 1, LIKE IT SHOULD

ProductCollection productCollection1 = new ProductCollection()
{
    Name = "Apple Collection2",
    Products = new Collection<Product>() {
        productRepository.Get(1)
    },
};

this.productCollectionRepository.Add(productCollection1);

Trace.WriteLine(productCollection.Products.Count); // PRINTS 0, SHOULD PRINT 1, PRODUCT GOT REMOVED
Trace.WriteLine(productCollection1.Products.Count); // PRINTS 1, LIKE IT SHOULD

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您必须将实体之间的关系配置为多对多关系,现在Product只能与一个ProductCollection关联。

您可以添加

public virtual ICollection<ProductCollection> ProductCollections { get; set; }

到你的Product班级,EF会自动处理,或者你可以使用FluentApi进行配置。

参见例如http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx