7

我正在使用实体框架与自我追踪实体T4模板,默认情况下,它将生成一个SQL查询设置实体在UPDATE语句中的所有属性。我只想要一个包含修改属性的UPDATE语句。如何让Entity Framework只更新在生成的SQL中修改的属性?

我修改了T4模板书中规定:Entity Framework Recipes: A Problem-Solution Approach页503

我改变这条线在T4模板:

OriginalValueMembers originalValueMembers = new OriginalValueMembers(false, metadataWorkspace, ef); 

使得实体跟踪每个属性的变化,而不是只是跟踪实体更改。

而且还

context.ObjectStateManager.ChangeObjectState(entity, EntityState.Unchanged); 

完成这些修改后我得到的SQL语句的期望的结果与在UPDATE语句只修改后的值/属性。但是,有一个奇怪的副作用。将null的INT属性从null更新为null以外的内容时,实体框架将忽略该更改。自跟踪模型使用准确的OriginalValue null显示ChangeTracker中的更改,但是当实体框架尝试生成UPDATE SQL时,如果原始值null和新值不为null,则不会看到该属性发生更改。如果原始值不为空并且值发生变化,我就工作了。

它似乎工作良好的字符串属性从null到非空值,但int?不管用。

有没有人有任何想法?

+0

如果您发布的是代码或XML,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010),以良好地格式化和语法突出显示它! – 2010-09-10 04:58:50

+1

STE模板可能有一个错误。这个讨论可能有助于http://stackoverflow.com/questions/3598550/are-nullable-foreign-keys-allowed-in-entity-framework-4/3601768 – 2010-09-10 12:23:36

+0

我没有一个外键涉及到我是表使用。这只是一个没有外键的实体。上面的链接似乎是同一个问题,但仍然没有解决方案。 – 2010-09-10 15:23:33

回答

相关问题