如何首先使用实体​​框架代码更新一行?

Posted

技术标签:

【中文标题】如何首先使用实体​​框架代码更新一行?【英文标题】:How to update a row using Entity Framework code first? 【发布时间】:2011-02-08 16:07:02 【问题描述】:

我应该如何更新数据库中的一行?没有更新方法,如果我使用 add 并且主键 id 已经存在,我会得到一个异常。如果可能,请提供一个示例。

【问题讨论】:

识别有问题的数据库。 【参考方案1】:

最简单的方法是:

(1) 使用 pk 检索现有行。

(2) 更新属性。

(3) 在上下文中调用 SaveChanges()。

例如

        var student = context.Students.Find(42);

        student.Description = "updated";

        context.SaveChanges();

【讨论】:

这是最简单的方法,但它对数据库进行了一次查询,不是吗?我的意思是它必须执行 SELECT 才能找到您要更新的实体,然后对其进行更新。但总的来说,您应该能够在没有此查询的情况下仅使用 UPDATE 来完成此操作。有没有这样的方法?【参考方案2】:

这是一种对我有用的方法,无需先进行查询:

context.Students.Attach(student);
context.Entry(student).State = EntityState.Modified;
context.SaveChanges();

【讨论】:

到目前为止,另一个答案对我有用,但在我的第一个代码优先项目中没有。那么,您知道为什么您的答案有效吗? 如果您没有像 Paul 的回答那样发出 find 查询,那么学生对象是从哪里来的? 对不起,我已经两年多没有使用 EF 了。由于我不再熟悉该框架,因此无法评论我的答案。 @LeoHernandez,感谢您的快速回复。祝你一切顺利!

以上是关于如何首先使用实体​​框架代码更新一行?的主要内容,如果未能解决你的问题,请参考以下文章

实体框架6代码首先用oracle更新实体

如何首先使用实体​​框架 5 代码删除具有导航属性的对象?

如何首先在实体框架代码中设置身份主键的起始值?

调试代码优先的实体框架迁移代码

在实体框架中更新具有所需属性的实体

首先使用实体​​框架代码保存单个实体对象