实体框架工作 添加同一对象时的第一个问题

本文关键字:第一个 问题 对象 框架 工作 添加 实体 | 更新日期: 2023-09-27 18:36:55

我创建了一个代码优先数据库,其中包含以下 2 个模型类。

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;
    }
}

现在,当我创建产品集合 A 并添加产品 B 时,它会像应该的那样添加。现在,当我创建产品集合 C 并添加相同的产品 B 时,它会被添加,但会从产品集合 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

有什么想法可以解决这个问题吗?

实体框架工作 添加同一对象时的第一个问题

您必须

将实体之间的关系配置为多对多,现在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