EntityFrameWork 添加相同对象时的 ICollection 代码第一个问题
EntityFrameWork ICollection Code First Issue when adding same object
我使用以下 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;
}
}
现在,当我创建 ProductCollection A 并添加 Product B 时,它会按应有的方式添加。
现在,当我创建 ProductCollection C 并添加相同的 Product 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
有什么解决办法吗?
您必须将实体之间的关系配置为多对多,现在Product
只能与一个ProductCollection
关联。
您可以添加
public virtual ICollection<ProductCollection> ProductCollections { get; set; }
到您的 Product
class,EF 将自动处理它,或者您可以使用 FluentApi 对其进行配置。
我使用以下 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;
}
}
现在,当我创建 ProductCollection A 并添加 Product B 时,它会按应有的方式添加。 现在,当我创建 ProductCollection C 并添加相同的 Product 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
有什么解决办法吗?
您必须将实体之间的关系配置为多对多,现在Product
只能与一个ProductCollection
关联。
您可以添加
public virtual ICollection<ProductCollection> ProductCollections { get; set; }
到您的 Product
class,EF 将自动处理它,或者您可以使用 FluentApi 对其进行配置。