と書くことができますUserType
。利点は、さまざまな種類の 10 進数を簡単に区別できることです (ほとんどの場合、すべての10 進数を同じ精度にしたくないでしょう)。
Property(
x => x.Dollars,
m => m.Type<MoneyUserType>()
);
これをすべての通貨プロパティに入れる努力が必要ですが、より読みやすく自己記述的なマッピング定義が得られます。
(構文的に) 同様の解決策ですが、実装が簡単なのは、精度を設定する拡張メソッドを作成することです。
Property(
x => x.Dollars,
m => m.MapMoney()
);
public static void MapMoney(this IPropertyMapper mapper)
{
m.Precision(9);
m.Scale(6);
}
ここでも同じです: マッピング定義をより自己記述的にします。
(はい、すべてのファイルを変更したくないことはわかっていますが、この情報をマッピング ファイルに入れることをお勧めします。実際の小数が何であるかがより明確になるためです。 Money プロパティを使用しますが、Amount プロパティは保持します。完全に暗黙的なソリューションについては、続きをお読みください。)
または、マッピング規則を使用することもできます。これらは非常に強力です。マッピング ファイルの精度を上書きすることもできるため、柔軟性が非常に高くなります。
mapper.BeforeMapProperty += MapperOnBeforeMapProperty;
private void MapperOnBeforeMapProperty(
IModelInspector modelInspector,
PropertyPath member,
IPropertyMapper propertyCustomizer)
{
Type propertyType;
// requires some more condition to check if it is a property mapping or field mapping
propertyType = (PropertyInfo)member.LocalMember.PropertyType;
if (propertyType == typeof(decimal))
{
propertyCustomizer.Precision(9);
propertyCustomizer.Scale(6);
}
}
デフォルトとして、ユーザータイプをマッピング規則に入れることもできます。