我正在使用带有自我跟踪实体 T4 模板的实体框架,默认情况下,它将生成一个 SQL 查询,在 UPDATE 语句中设置实体上的所有属性。我只想要一个包含已修改属性的 UPDATE 语句。
我按照书中的说明修改了 T4 模板:Entity Framework Recipes: A Problem-Solution Approach page 503。
我在 T4 模板中更改为这一行:
OriginalValueMembers originalValueMembers = new OriginalValueMembers(false, metadataWorkspace, ef);
使实体跟踪每个属性更改,而不仅仅是跟踪实体更改。
并且
context.ObjectStateManager.ChangeObjectState(entity, EntityState.Unchanged);
进行这些更改后,我得到了 SQL 语句的所需结果,其中仅在 UPDATE 语句中修改了值/属性。然而,有一个奇怪的副作用。将可为 null 的 INT 属性从 null 更新为 null 以外的内容时,实体框架会忽略该更改。Self-Tracking Models 显示 ChangeTracker 中的更改,具有准确的 OriginalValue null,但是当实体框架尝试生成 UPDATE SQL 时,如果原始值为 null 且新值不为 null,则它没有看到该属性更改。如果原始值不为空并且值被更改,我会工作。
在从 null 到非 null 值的字符串属性上似乎可以正常工作,但是 int? 不管用。
有没有人有任何想法?