我正在学习ASP.NET MVC和实体框架。
从this web references学习后,我认为当我们想要进行更新时,
我的代码:
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)
所以现在我正在寻找更新过程的方法而不删除原始行。
这是否可以在实体框架中使用?
请让我知道。
答案 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)
一切都在“自动化”。