IEntityChangeTracker的多个实例不能引用通用实体

时间:2014-10-30 13:02:58

标签: entity-framework generics repository instances

经过大量的拔毛后,我决定加入堆栈溢出社区并发布我的第一个问题。当我尝试更新时,我收到此错误“实体不能被IEntityChangeTracker的多个实例引用”。

这是IRepository。

public interface IRepository<T>
{
    void Update(T item);
}

和存储库。

public class Repository<T> : IRepository<T> where T : class
{
    private readonly DbContext _dbContext;

    public Repository(DbContext context)
    {
        this._dbContext = context;
    }

    public virtual void Update(T item)
    {
        _dbContext.Entry(item).State = EntityState.Modified; // This is where the error happens
        _dbContext.SaveChanges();
    }
}

和Model class。

    Repository<Model> _model = new Repository<Model>(new ModelContext()); 

    public void Update(Model item)
    {
        this.Modified = DateTime.Now;

        _model.Update(item);
    }
}

和模型上下文。

public class ModelContext : DbContext
{
    public ModelContext()
        : base("name=DbContext")
    {
    }

    public DbSet<ModelContext> Model { get; set; }
}

还有控制器

public class ModelController : Controller
{
    Model _model = new Model(); 

    public ActionResult Edit(int id, string name)
    {
        Model item = _model.GetById(id);

        if (Request.IsAjaxRequest())
        {
            item.Name = name;
            item.Update(item);
        }

        return View();
    }
}

现在这是一个很大的问题,如果那里的一些救世主可以让我的一天。

0 个答案:

没有答案