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

回答

相關問題