ASP.NET MVC模型类更新功能

时间:2011-12-28 09:52:52

标签: c# sql-server-2005 entity-framework

我正在学习ASP.NET MVC和实体框架。

this web references学习后,我认为当我们想要进行更新时,

  1. 我们需要首先删除现有记录
  2. 然后插入新记录。
  3. 我的代码:

    public List<UserModel> _usrList = new List<UserModel>();
    
    public void Update(UserModel umToUpdate)
    {
            foreach (UserModel um in _usrList)
            {
                if (um.UserName == umToUpdate.UserName)
                {
                    _usrList.Remove(um);
                    _usrList.Add(umToUpdate);
                    break;
                }
            }
        }
    

    当我们以传统方式进行操作时,我们可以在不删除数据的情况下更新数据。

    (eg. update tablename set column = value where columnname = value)
    

    所以现在我正在寻找更新过程的方法而不删除原始行。

    这是否可以在实体框架中使用?

    请让我知道。

1 个答案:

答案 0 :(得分:3)

这个例子是关于创建视图和客户端验证,遗憾的是服务器端部分(IMO)是坏的。从某种意义上来说,它会造成混乱...... 你是对的,你不应该用真正的数据库来做。

但是asp.net网站上有EF示例:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-basic-crud-functionality-with-the-entity-framework-in-asp-net-mvc-application

数目:

  

在示例中,您举例说明context.Entry(student).State = EntityState.Modified;是我们需要更新时需要做的所有事情吗?请再解释一下。

几乎该行告诉EF该记录已更新,这些是当前值。现在,更改仅在服务器的内存中。实际上,您通过发出db.SaveChanges();命令将更改保存回数据库。其余的由EF处理。请参阅示例中的“创建编辑页面”部分。

  

如果是这样,我们不需要先删除现有记录吗?

不,很遗憾,没有数据库的第一个例子令人困惑。当我第一次看到它时,我认为“WTF是吸烟的人吗?”。只是想弄清楚它是官方样本......

  

然后,我们不需要提供任何条件参数来进行更新过程吗?

不必显式地执行此操作,因为MVC的模型绑定负责从发布的数据中读取所有值(包括隐藏字段中的PersonID)。当前记录的ID位于html隐藏字段中,因此MVC知道您要更新的记录。例如:Views \ Students \ Edit.cshtml row 17:

@Html.HiddenFor(model => model.PersonID)

一切都在“自动化”。