C# 实体框架System.InvalidOperationException:&x27;一个实体对象不能被IEntityChangeTracker的多个实例引用;

C# 实体框架System.InvalidOperationException:&x27;一个实体对象不能被IEntityChangeTracker的多个实例引用;,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在ASP.NETMVC项目中使用EntityFramework 我的解决方案中有3个项目: Web项目ASP.net MVC 存在所有类的域项目 有my DbContext和request DB的数据项目 我有两门课: 使用者 文件夹 当我要创建文件夹时,我希望Id User将用户与文件夹相关联。 因此,在我的类文件夹中,我有以下属性来建立关系: public virtual User user {get; set; } 当我想在DB中添加文件夹时,我在这一行有一个错误: _db

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

  • Web项目ASP.net MVC
  • 存在所有类的域项目
  • 有my DbContext和request DB的数据项目
我有两门课:

  • 使用者
  • 文件夹
当我要创建文件夹时,我希望Id User将用户与文件夹相关联。 因此,在我的类文件夹中,我有以下属性来建立关系:

public virtual User user  {get; set; }
当我想在DB中添加文件夹时,我在这一行有一个错误:

_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”。我建议您将一个数据库集命名为“用户”,另一个数据库集命名为“文件夹”。然后,您可以通过一个上下文轻松访问用户和文件夹

以下是VB.net中的代码:

Public Class MyContext 
    Inherits DbContext

    Public Property Users As DbSet(of User)
    Public Property Folders As DbSet(of Folder)
End Class
和c#:

公共类MyContext:DbContext
{
公共数据库集用户{get;set;}
公共数据库集文件夹{get;set;}
}

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

您需要使用相同的上下文。如果出于某种原因需要切换,则应从其中一个字段(即文件夹)中检索Id字段,并使用它在与随后关联的实体相同的上下文中检索该文件夹。
public class MyContext : DbContext
{

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