2013-10-31 18 views
1

我有以下地圖創建:AutoMapper:int?被映射爲空時,有源已值

Mapper.CreateMap<UsuarioViewModel, GEN_USUARIOS>(); 

在這張地圖上,也有一些性能,這是「廉政?」 (可空的外鍵),例如IDSUPERVISOR。

爲了應用我使用下面的句子的映射:

Mapper.Map<UsuarioViewModel, GEN_USUARIOS>(usuarioVM, usuario); 
  • 如果源具有值(5)和目的地具有不值(null),則值被施加到目的地(5) 。
  • 如果源的值爲(6)且目標具有另一個值(5),則該值將正確應用於目標(6)。
  • 但是,如果兩者具有相同的值(不修改該值),則目標中的屬性映射到NULL,這是錯誤的!

這是一個錯誤還是有一些我錯過了?

編輯:我已經能夠在一個簡單的項目中查出問題。我在GitHub中創建了一個存儲庫:https://github.com/farlop/TestAutomapper。它包括代碼和一個SQL腳本來創建數據庫模式和樣本數據。爲了測試它,只需編輯IDSUPERVISOR列中具有值的記錄並保存而不更改任何數據。你可以看到數值如何不應該更新爲空

+1

這很可能是你錯過了一些東西。也許EF正在加入並將其設置爲NULL?這個要點工作得很好。 https://gist.github.com/idursun/7248645 – idursun

+0

你是對的。當然,它必須與EF做些事情。我試過用另一個可空屬性沒有映射到實體,它工作正常。我已對我的測試項目做出了承諾,以反映此問題 – Farlop

+0

嘗試刷新此問題。兩個月後,我的一位同事遇到了同樣的麻煩,我們無法找到問題所在。任何想法? – Farlop

回答

0

如陳述here,問題是還有一個導航屬性也被映射。由於源對象具有帶有空值的此屬性,因此正在覆蓋目標對象的導航屬性。因此,當保存對數據庫的更改時,EF使用空值更新外鍵屬性。