2010-09-13 68 views
2

相当常见的情况,似乎是从一种形式重新填充对象时是去实体框架中只更新实际更新的领域

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

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

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

理想情况下,如果EF真的发生了变化,我希望EF只标记已更改的内容。这可能吗?

回答

2

您使用的是什么版本的EF?

试试这个 - 去Name属性的定义实体,看看它在它的支票的设置方法一样:

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

如果没有,改变T4模板(如果你”重新使用EF 4.0)并手动添加。

否则,我不认为有一个'不变'的变化财产的廉价方式。

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

+0

我现在的模型目前是从数据库生成的,所以没有T4模板(据我所知)。它是EF4.0,但它没有if(Name!= value) - 这看起来很理想! – Paul 2010-09-13 13:37:53

+0

我编辑了我的答案来展示如何创建t4文件。 – veljkoz 2010-09-13 13:53:57