【发布时间】:2017-02-27 10:13:11
【问题描述】:
我使用的是 EF 5(不是 6)。我有一个以下类的对象,它使用 EF 在 DB 中。
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public DateTime DOB { get; set;}
}
稍后,
我收到了对同一对象/记录进行更新的请求。
但在进行更新调用之前,我想交叉比较属性是否实际更改,因为我可能会获得相同的更新记录,所以不想进行盲目更新。
var student = _context.Students.select(x =>x.Name == "").first();
student.name = "";
student.age = "";
student.DOB = "";
_context.Entry(student).State = EntityState.Modified;
_context.saveChanges();
EF 是否为我提供了一些内置方法?
或者,我需要逐一交叉比较每个属性并做出决定?我可以拥有 20 个属性...
有什么想法吗?
【问题讨论】:
-
"I may get the same record for an update" 究竟是什么意思?你的记录没有主键吗?
-
拥有主键会对我的问题产生什么影响?我保存的记录有主键。后来有人通过发送 Name、Age 和 DOB 参数调用了相同的方法。现在我需要决定是只进行盲目更新调用还是至少先比较属性?除非我遗漏了一些关于 EF 的内容
-
如果你删除
_context.Entry(student).State = EntityState.Modified;这行,EF会帮你检查。 -
EntityState.Modified在您的情况下是无用的,因为您正在更新的实体已被上下文跟踪 - 因此您可以删除它而不会造成任何伤害。 EntityStates 通常用于分离上下文 -
如果您想知道哪些字段已更改以及更改为什么值 - 那么您应该为此编写自己的方法,EF 不会为您做。
标签: c# entity-framework entity-framework-5