Asp.net mvc 4 EntityFramework更新删除记录

Asp.net mvc 4 EntityFramework更新删除记录,asp.net-mvc-4,entity-framework-5,unit-of-work,Asp.net Mvc 4,Entity Framework 5,Unit Of Work,我正在使用.Net4.5、EF5和mssql2008r2开发一个MVC4应用程序。我正在使用Db上下文和自动生成的实体类/模型以及工作单元模式 当我尝试通过Edit ActionResult方法更新表记录时,当我更新的数据最初为空时,记录会被删除,例如添加中间名 我可以跟踪从ActionResult到GenericRepository再到UnitOfWork Save()的对象,在这里调用db context savechanges()。直到那时,数据还在那里。之后,我不知道如何调试它 因此,任

我正在使用.Net4.5、EF5和mssql2008r2开发一个MVC4应用程序。我正在使用Db上下文和自动生成的实体类/模型以及工作单元模式

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

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

因此,任何有关调试或解决此问题的帮助都将不胜感激。我可以成功创建和删除表记录。我还尝试在编辑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);
    }
}
[HttpPost]
公共行动结果编辑(v_Demographics vm)
{
尝试
{
if(ModelState.IsValid)
{
unitOfWork.DemographicsRepository.Update(vm);
unitOfWork.Save();
//db.Entry(vm.State=EntityState.Modified;
//db.SaveChanges();
返回操作(“索引”);
}
}
捕获(数据异常)
{
//记录错误(在DataException之后添加变量名)
ModelState.AddModelError(“,”无法保存更改。请重试,如果问题仍然存在,请与系统管理员联系。“);
}
返回视图(vm);
}
公共类GenericRepository,其中tenty:类
{
内部感知db=新感知();
内部数据库集;
公共一般报告(AIPImentities db)
{
这个.db=db;
this.dbSet=db.Set();
}
公共虚拟无效更新(TEntity entityToUpdate)
{
数据库集附加(实体更新);
db.Entry(entityToUpdate).State=EntityState.Modified;
}
}
公共类UnitOfWork:IDisposable
{
私有AIPImSenties db=新AIPImSenties();
私人普通储蓄人口统计储蓄;
公共一般报告人口统计报告
{
得到
{
if(this.demographicsRepository==null)
{
this.demographicsRepository=新的一般存储(db);
}
回归人口统计学回归;
}
}
公共作废保存()
{
db.SaveChanges();
}
私有布尔=假;
受保护的虚拟void Dispose(bool disposing)
{
如果(!this.disposed)
{
如果(处置)
{
db.Dispose();
}
}
这是真的;
}
公共空间处置()
{
处置(真实);
总干事(本);
}
}

事实证明,删除错误是由MSSQL视图引起的。这里的代码基于此,现在非常有效。

如果我们能看到通用存储库代码,可能会有所帮助,因为这就是updateChris的工作,我在我的原始帖子中添加了一个编辑版本。这是未编辑的通用存储库。克里斯,谢谢你的帮助,但我发现这是一个MSSQL视图问题。周末休息是有帮助的。你应该加上这个作为你的答案,并接受结束这个问题