看起来很常见的用例是从表单中重新填充对象时
myobj.Name = "textbox value";
myobj.Content = "textbox content";
但是,名称可能没有改变,它可能只是对内容文本框的更改。
问题是实体框架将Name视为已更改,因为我设置了它的值,无论我是否设置了完全相同的值。
理想情况下,我希望EF只在真正改变的情况下将事物标记为已更改。这可能吗?
答案 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的文本 - 你可以在扩展管理器中找到它并且它是免费的。