仅更新实体框架中的实际更新字段

时间:2010-09-13 13:26:04

标签: c# asp.net entity-framework

看起来很常见的用例是从表单中重新填充对象时

myobj.Name = "textbox value";
myobj.Content = "textbox content";

但是,名称可能没有改变,它可能只是对内容文本框的更改。

问题是实体框架将Name视为已更改,因为我设置了它的值,无论我是否设置了完全相同的值。

理想情况下,我希望EF只在真正改变的情况下将事物标记为已更改。这可能吗?

1 个答案:

答案 0 :(得分:2)

您使用的是哪个版本的EF?

试试这个 - 转到实体中Name属性的定义,看看它是否有一个检查它的setter:

set
{
    if (Name != value)
    ...
}

如果没有,请更改t4模板(如果您使用的是EF 4.0)并手动添加。

否则,我认为没有一种廉价的方式可以“改变”已改变的财产。

编辑: 要从现有模型创建T4,请右键单击您的模型,选择Add code generation items,然后选择EntityObject generator。这将创建一个tt文件,您可以通过发出保存命令来运行(如果您想允许它运行,您将收到提示)。保存后,它将生成一个与edmx模型生成的文件完全相同的文件。现在,您只需找到生成属性set的部分。 tt一开始可能会令人生畏,但它真的不需要学习它...有一个扩展用于着色t4的文本 - 你可以在扩展管理器中找到它并且它是免费的。