7

我正在使用带有自我跟踪实体 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? 不管用。

有没有人有任何想法?

4

1 回答 1

1

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

于 2010-12-06T03:47:57.743 回答