【问题标题】:EntityFramework Update Deletes RecordEntityFramework 更新删除记录
【发布时间】:2013-05-10 22:59:15
【问题描述】:

我正在使用 .Net4.5、EF5 和 MSSQL 2008R2 开发 MVC4 应用程序。我正在使用 Db Context 和自动生成的实体类/模型以及工作单元模式。

当我尝试通过 Edit ActionResult 方法更新表记录时,当我更新的数据最初为空时,记录被删除,例如添加中间名。

我可以跟踪对象从 ActionResult 到 GenericRepository 到 UnitOfWork Save() ,其中调用了 db context savechanges()。数据在那里直到那时。之后,我不知道如何调试它。

因此,对于调试或解决此问题的任何帮助将不胜感激。我可以成功创建和删除表记录。我还尝试在 Edit ActionResult 中简单地使用 db 上下文,并获得相同的删除结果。我测试了映射的存储过程,它更新正确。

    [HttpPost]
    public ActionResult Edit(v_Demographics vm)
    {

        try
        {
            if (ModelState.IsValid)
            {
                unitOfWork.DemographicsRepository.Update(vm);
                unitOfWork.Save();
                //db.Entry(vm).State = EntityState.Modified;
                //db.SaveChanges();
                return RedirectToAction("Index");
            }
        }
        catch (DataException)
        {
            //Log the error (add a variable name after DataException)
            ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
        }
        return View(vm);
    }


public class GenericRepository<TEntity> where TEntity : class
   {
    internal SEntities db = new SEntities();
    internal DbSet<TEntity> dbSet;

    public GenericRepository(AIPIMSEntities db)
    {
        this.db = db;
        this.dbSet = db.Set<TEntity>();
    }

    public virtual void Update(TEntity entityToUpdate)
    {
        dbSet.Attach(entityToUpdate);
        db.Entry(entityToUpdate).State = EntityState.Modified;
    }
}


 public class UnitOfWork : IDisposable
{
    private AIPIMSEntities db = new AIPIMSEntities();
    private GenericRepository<v_Demographics> demographicsRepository;

    public GenericRepository<v_Demographics> DemographicsRepository
    {
        get
        {

            if (this.demographicsRepository == null)
            {
                this.demographicsRepository = new GenericRepository<v_Demographics>(db);
            }
            return demographicsRepository;
        }
    }


    public void Save()
    {
        db.SaveChanges();
    }

    private bool disposed = false;

    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                db.Dispose();
            }
        }
        this.disposed = true;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
}

【问题讨论】:

  • 如果我们可以看到通用存储库代码可能会有所帮助,因为这是在进行更新
  • 克里斯,我在原始帖子中放了一个经过编辑的版本。这是未经编辑的通用存储库。
  • 克里斯,感谢您的帮助,但我发现这是一个 MSSQL 视图问题。周末休息会很有帮助。
  • 您应该将此添加为您的答案并接受以关闭问题

标签: asp.net-mvc-4 entity-framework-5 unit-of-work


【解决方案1】:

事实证明,删除错误是由 MSSQL 视图引起的。这里的代码基于这个tutorial,并且现在可以正常工作。

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多