c# - Entity Framework System.InvalidOperationException : 'An entity object cannot be referenced by multiple instances of IEntityChangeTracker.'

标签 c# asp.net-mvc entity-framework

我在 ASP.Net MVC 项目中使用 EntityFramework 我的解决方案中有 3 个项目:

  • 网络项目 ASP.net MVC
  • 所有类的领域项目
  • 有我的 DbContext 和请求 DB 的数据项目

我有 2 个类(class):

  • 用户
  • 文件夹

当我想创建文件夹时,我希望 Id User 将 User 与文件夹相关联。 所以在我的类(class)文件夹中,我有这个属性来建立关系:

public virtual User user  {get; set; }

当我想在数据库中添加文件夹时,这一行出现错误:

_dbSet.Add(entity);

错误是:System.InvalidOperationException:“一个实体对象不能被 IEntityChangeTracker 的多个实例引用。”

这是方法

 public void Insert(TEntity entity)
        {
            if (entity == null)
                throw new ArgumentNullException("entity");

            try
            { 
                    _dbSet.Add(entity);
                    _dbContext.SaveChanges();
            }
            catch (DbEntityValidationException ex)
            {
                ThrowValidationError(ex);
            }
        }

我想我没有使用相同的 DbContext,但我不知道在使用多个实体(用户和文件夹)时如何保持相同的 DbContext

最佳答案

我试着回答你的最后一个问题。

I think I don't use the same DbContext but I don't know 
how keep the same DbContext when I use many entities (User and Folder)

你的上下文可以有多个 DbSet。看起来你只有一个,因为你称之为“_dbSet”。我建议您将一个 DbSet 命名为“用户”,将一个 DbSet 命名为“文件夹”。然后,您可以通过一个上下文轻松访问用户和文件夹。

这是 VB.net 中的代码:

Public Class MyContext 
    Inherits DbContext

    Public Property Users As DbSet(of User)
    Public Property Folders As DbSet(of Folder)
End Class

和 C#:

public class MyContext : DbContext
{

    public DbSet<User> Users { get; set; }
    public DbSet<Folder> Folders { get; set; }
}

如果您对此有更多疑问,请发布您当前上下文类的源代码。

关于c# - Entity Framework System.InvalidOperationException : 'An entity object cannot be referenced by multiple instances of IEntityChangeTracker.' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46347465/

相关文章:

c# - 将字段标记为具有属性 [XmlElement] 的 IsRequired

javascript - mvc - ajax pager - 使当前页面无效链接

asp.net-mvc - 字典mvc中的下拉列表

asp.net-mvc - 复选框的 FormCollection

c# - 使用通用存储库时将 'Type' 特定函数放在哪里

c# - Entity Framework 中不同表的抽象操作

entity-framework - 使用假 DbContext 和 Autofixture 和 Moq 进行测试

c# - Task.Run 下是否需要await/async 关键字?

c# - SMTP Gmail 超时

c# - 具有多个文件输出的 T4 嵌套模板