【问题标题】:Cannot save many-to-many Entity Framework无法保存多对多实体框架
【发布时间】: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


【解决方案1】:

我的上下文类的多个实例引用了一个实体对象类别。问题出在控制器中,我在其中使用了两个存储库:一个用于产品,另一个用于类别。在这两个类中,我声明了上下文实例。因此,声明了两个上下文实例并引发了异常。

这是我的错和不专心。问题已结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多