将struct映射为一种类型(可以为空)

时间:2014-11-06 12:10:24

标签: c# nhibernate fluent-nhibernate

我有struct包装decimal所以我可以使用EditorTemplates,具有类型安全性,将来可以扩展以添加Currency等等:

public struct Price
{
    private readonly decimal value;

    public Price(decimal value)
    {
        this.value = value;
    }

    public static implicit operator Price(decimal value)
    {
        return new Price(value);
    }

    public static explicit operator decimal(Price price)
    {
        return price.value;
    }
}

然后在许多使用Fluent NHibernate映射的类型中使用它,例如:

public class SomeEntity
{
    public virtual int Id { get; protected set; }
    public virtual Price SomePrice { get; set; }
    public virtual Price? NullablePrice { get; set; }
}

我怎样才能告诉FNH我什么时候

public SomeEntityMap()
{
    this.Id(x => x.Id);
    this.Map(x => x.SomePrice);
    this.Map(x => x.NullablePrice);
}

这应该只被视为decimalNullable<decimal>

最好不必编辑每个映射,因此我不想使用IUserType,因为这需要(我认为)放在任何地方

this.Map(x => x.SomePrice).CustomType<PriceType>();
this.Map(x => x.NullablePrice).CustomType<NullablePriceType>();

1 个答案:

答案 0 :(得分:0)

您希望通过Components以与Following code extract类似的方式实现您的目标:

 Component(x => x.Price, m =>
{
m.Map(money => money.Amount, "Price_Amount");
m.Map(money => money.CurrencyCode, "Price_CurrencyCode");
});

组件是将规范化数据映射到可重用实体的完美方法。