我在 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/