代码之家  ›  专栏  ›  技术社区  ›  Dustin Laine

LINQ到SQL中的模型绑定问题

  •  1
  • Dustin Laine  · 技术社区  · 14 年前

    我刚刚开始使用LINQ,对MVC非常熟悉。我有一个正在更新记录的强类型视图。我成功地完成了一项创作:

    这可以正常工作,并在数据库中创建一个记录:

    public ActionResult Create(TABLEMODEL tableModel)
    {
        DBDataContext db = new DBDataContext();
        if (ModelState.IsValid)
        {
            db.TABLEMODEL.InsertOnSubmit(tableModel);
            db.SubmitChanges();
        }
    }
    

    但在尝试更新时:

    public ActionResult Manage(TABLEMODEL tableModel)
    {
        DBDataContext db = new DBDataContext();
        if (ModelState.IsValid)
        {
            db.SubmitChanges();
        }
    }
    

    这将失败,因为它不会更新数据库中的记录。没有实际的错误/异常发生,我可以很好地解决它。

    我肯定我错过了什么,但找不到什么。我很感激你在这件事上的帮助。


    我注意到如果我使用DataContext得到一个记录:

    DBDataContext db = new DBDataContext();
    var m = db.TABLEMODELs.Single(m => m.ID == 1);
    m.Name = "UpdatedName";
    db.SubmitChanges();
    

    这确实会更新,所以我假设我没有从我的模型绑定到LINQ上下文。

    我的解决方案
    我发现您需要检索对象,然后用表单更新它。很简单。

    [HttpPost]
    public ActionResult Manage(int ID, FormCollection form)
    {
        DBSDataContext db = new DBSDataContext();
        var t= db.TABLEMODELs.Single(b => b.ID == ID);
        UpdateModel(t);
        if (ModelState.IsValid)
        {
            db.SubmitChanges();
        }
        return View(t);
    }
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   JcMaltaDev    14 年前

    起初的

    可能是这样的(仅举一个例子,对您的模式一无所知):

    var originalTableModel = db.GetById( tableModel.Id);
    originalTableModel.FirstName = tableModel.FirstName;
    db.SubmitChanges();