我将Fluent NHibernate与SQlite一起使用,我需要存储价格。我更喜欢在存储之前将价格乘以100,以便删除小数位,以便我可以使用INTEGER数据类型而不是REAL,因为REAL始终使用8个字节,而INTEGER可能需要1、2、3、4、6或根据SQlite文档为8个字节。
我是否需要声明一个自定义类型来处理乘以100(在检索价格时乘以100)并在与Map(p => p.PriceValue).CustomType<PriceWithoutDecimalPlace>();
的映射中使用它吗?
还是有更简单的方法?
答案 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"});