1

我正在使用POCOs(無代理)和EF4。EF4映射可爲空的十進制列爲非空值屬性

在數據庫中,我有這個可空小數列:

<Property Name="AMOUNT" Type="decimal" Precision="12" Scale="2" /> 

在我的POCO,我有這個不可爲空值屬性:

public decimal Amount { get; set; } 

如果在數據庫中的值是null ,我希望該屬性設置爲0。我怎樣才能做到這一點?我寧願不要在這裏擁有Nullable屬性,否則我必須用GetValueOrDefault()代碼污染我的業務邏輯。

[這question好像我是問什麼,但我不知道它是真的回答。]

回答

2

不幸的是,你必須使用可空小數在你的POCO,因爲EF不提供任何簡單類型的映射/類型轉換器,您可以放置​​您的轉換邏輯。類型必須相同才能使其工作。

在EDMX的情況下,有一種可能的醜陋解決方法。您可以將列映射到非公共屬性,並公開另一個未映射的公共屬性(在POCO類的部分部分中),並且您的轉換邏輯將位於其getter和setter中。 Here介紹瞭如何更改財產的可見性。

+0

「在EDMX的情況下,有一種可能的醜陋解決方法。」 - 這不是一個醜陋的解決方法,而是一種常見的做法。實體框架有很多限制,並且類文件有意生成爲部分文件,以便您可以添加任何您想要的文件。順便說一句 - 創建純數據類(沒有任何邏輯 - 就像EF生成的那樣)是一種反模式。 – kubal5003

+0

@kubal:這是一種解決方法,因爲這種映射邏輯應該是ORM本身的一部分。此外,您的反模式僅存在於領域驅動設計的世界中,並被稱爲貧血域模型。如果你不遵循域驅動設計,你就沒有這種反模式。 –

+0

你是對的,我的觀點是,因爲EF故意支持不能被認爲醜陋的部分類,但如果你看看整個設計,那麼這當然不是做事的優雅方式。 – kubal5003

相關問題