1

EF4でPOCO(プロキシなし)を使用しています。データベースでEF4 null不可能な値へのnull可能な10進数の列のマッピング

、私はこのNULL可能10進数の列があります。私のPOCOオン

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

を、私はこのnull非許容値のプロパティを持っている:

public decimal Amount { get; set; } 

データベース内の値がnullある場合プロパティを0に設定します。どうすればこれを達成できますか?私はここにNullableプロパティを持っていないほうがいいでしょう。さもなければ、ビジネスロジックをGetValueOrDefault()コードで汚染する必要があります。

[このquestionは私が求めていたもののように思えたが、私はそれが本当に答えたかわからない。]

答えて

2

EFは/任意の単純型マッピングを提供していないので、残念ながら、あなたのPOCOでnull許容のDecimalを使用する必要があります。変換ロジックを配置することができます。タイプを同じにして動作させる必要があります。

EDMXの場合、疑わしい回避策が1つあります。列を非公開のプロパティにマップし、マッピングされない別のパブリックプロパティ(POCOクラスの一部)を公開すると、getterおよびsetterに変換ロジックが追加されます。 Hereは、プロパティの可視性を変更する方法について説明しています。

+0

"EDMXの場合、醜い回避策が1つあります。"これは醜い回避策ではありませんが、一般的な方法です。エンティティフレームワークには多くの制限があり、クラスファイルは意図的に部分的に生成されるため、必要なものを追加できます。ところで、純粋なデータクラス(EFで生成されたものと同様のロジックなし)を作成することは、反パターンです。 – kubal5003

+0

@kubal:これは回避策です。なぜなら、このマッピングロジックはORM自体の一部でなければならないからです。また、あなたの反パターンはドメイン駆動設計の世界にのみ存在し、貧血ドメインモデルと呼ばれています。ドメイン駆動設計に従わない場合は、そのアンチパターンはありません。 –

+0

あなたが正しいですが、私の指摘は、EFは意図的に醜いと見なすことができない部分的なクラスをサポートしているからです。しかし、デザイン全体を見れば、これはエレガントなやり方ではありません。 – kubal5003