繁体   English   中英

Entity Framework System.InvalidOperationException:'一个IEntityChangeTracker的多个实例不能引用一个实体对象。

[英]Entity Framework System.InvalidOperationException : 'An entity object cannot be referenced by multiple instances of IEntityChangeTracker.'

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

  • Web项目ASP.net MVC
  • 有全班的领域项目
  • 有我的DbContext和请求数据库的数据项目

我有2节课:

  • 用户

当我要创建文件夹时,我希望ID用户将用户与文件夹相关联。 所以在我的班级Folder中,我有这个属性来建立关系:

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; }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM