C# 实体框架System.InvalidOperationException:&x27;一个实体对象不能被IEntityChangeTracker的多个实例引用;
我正在ASP.NETMVC项目中使用EntityFramework 我的解决方案中有3个项目: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
- Web项目ASP.net MVC
- 存在所有类的域项目
- 有my DbContext和request DB的数据项目
- 使用者
- 文件夹
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; }
}