如何让Entity Framework仅更新在SQL生成中修改的属性?

Joh*_*ert 7 linq-to-entities entity entity-framework entity-framework-4 self-tracking-entities

我正在使用Entity Framework和自跟踪实体T4模板,默认情况下,它会生成一个SQL查询,在UPDATE语句中设置实体上的所有属性.我只想要一个包含已修改属性的UPDATE语句.

我修改了书中指定的T4模板:实体框架配方:问题解决方案方法页面503.

我在T4模板中改为这一行:

OriginalValueMembers originalValueMembers = new OriginalValueMembers(false, metadataWorkspace, ef);
Run Code Online (Sandbox Code Playgroud)

使实体跟踪每个属性更改而不是仅跟踪实体已更改.

并且

context.ObjectStateManager.ChangeObjectState(entity, EntityState.Unchanged);
Run Code Online (Sandbox Code Playgroud)

进行这些更改后,我得到了所需的SQL语句结果,只有UPDATE语句中的修改后的值/属性.然而,有一个奇怪的副作用.将可空的INT属性从null更新为null以外的值时,Entity Framework会忽略该属性的更改.自跟踪模型使用准确的OriginalValue null显示ChangeTracker中的更改,但是当Entity Framework尝试生成UPDATE SQL时,如果原始值为null且新值不为null,则它不会看到该属性更改.如果原始值不为null并且值发生更改,我就会工作.

它似乎对从null到非null值的字符串属性工作正常,但是int?不管用.

有没有人有任何想法?

小智 1

如果有帮助,请找到解决此问题的帖子:修复可为空列的更新