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?不管用.
有没有人有任何想法?