NHibernate-保存前将价格乘以100

时间:2019-12-24 16:40:20

标签: nhibernate

我将Fluent NHibernate与SQlite一起使用,我需要存储价格。我更喜欢在存储之前将价格乘以100,以便删除小数位,以便我可以使用INTEGER数据类型而不是REAL,因为REAL始终使用8个字节,而INTEGER可能需要1、2、3、4、6或根据SQlite文档为8个字节。

我是否需要声明一个自定义类型来处理乘以100(在检索价格时乘以100)并在与Map(p => p.PriceValue).CustomType<PriceWithoutDecimalPlace>();的映射中使用它吗? 还是有更简单的方法?

2 个答案:

答案 0 :(得分:0)

您正在做的实际上是获得某些东西的技巧,希望对您有所帮助。要实现此技巧,您需要实现一些其他逻辑。现在,这种逻辑应该去哪里以及应该如何实现是意见。

IMO,看看下面的方法是否可行:

int priceValue;
public virtual int PriceValue
{
    get { return priceValue / 100; }
    set { priceValue = value * 100; }
}

答案 1 :(得分:0)

在NHibernate 5.2+中,您可以尝试将所有decimal属性的自定义类型注册为默认值。 像这样:

//Somewhere before SessionFactory is created
TypeFactory.RegisterType(typeof(decimal), new PriceWithoutDecimalPlace(), new[] {"decimal"});