EF4将可为空的十进制列映射到不可为空的值属性

时间:2011-07-18 20:23:25

标签: .net entity-framework entity-framework-4 non-nullable entity-framework-mapping

我正在使用EF4的POCO(无代理)。

在数据库中,我有这个可以为空的十进制列:

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

在我的POCO上,我有这个不可为空的值属性:

public decimal Amount { get; set; }

如果数据库中的值为null,我希望将该属性设置为0。我怎样才能做到这一点?我不希望在这里有Nullable属性,否则我必须用GetValueOrDefault()代码污染我的业务逻辑。

[这question似乎就像我问的那样,但我不确定它是否得到了真正的回答。]

1 个答案:

答案 0 :(得分:2)

不幸的是,您必须在POCO中使用可以为空的十进制数,因为EF不提供任何可以放置转换逻辑的简单类型映射/类型转换器。类型必须相同才能使其有效。

在EDMX的情况下,有一个可能的丑陋的解决方法。您可以将列映射到非公共属性并公开另一个未映射的公共属性(在POCO类的部分部分中),并且您将在其getter和setter中拥有转换逻辑。 Here描述了如何改变财产的可见性。