【发布时间】:2018-03-01 17:16:16
【问题描述】:
我有一个包含这些实体的简单多对多关系数据库:
public class Product
{
public Product()
{
this.Category = new HashSet<Category>();
}
// just other fields...
public virtual ICollection<Category> Category { get; set; }
}
public class Category
{
public Category()
{
this.Product = new HashSet<Product>();
}
// other fields
public virtual ICollection<Product> Product { get; set; }
}
我正在尝试保存产品,但它引发了异常:
System.InvalidOperationException: '无法定义两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象。'
我的代码:
public void SaveProduct(Product product, IEnumerable<Category> categories)
{
if (product.ProductID == null)
{
product.ProductID = RandomKeyGeneration();
context.Products.Add(product);
context.Products.Attach(product);
foreach (var cat in categories)
product.Category.Add(cat);
}
context.SaveChanges();
}
我用谷歌搜索并试图解决这个问题,但它仍然没有工作。
【问题讨论】:
-
你试过pastebin.com/MEeNYGKJ这样的东西吗?
-
@Spectarion 是的,它会在 context.Products.Add(product) 行抛出“System.InvalidOperationException:'一个实体对象不能被多个 IEntityChangeTracker 实例引用。'”。
-
您需要将
cat附加到上下文中,以便上下文了解类别。错误是不言自明的。您需要将两个实体放在同一个上下文中。
标签: c# asp.net-mvc entity-framework many-to-many