NServiceBus:如何扩展十进制列的比例?

时间:2011-10-06 12:31:26

标签: nhibernate nservicebus

我们使用的小数位数为六位小数,即1.123456。现在我们正在使用NServiceBus并且我们需要在我们的传奇数据中保留这个值,我们遇到了麻烦。

当我们回到传奇并再次获得我们的价值时,价值是1.12345。我没有发现任何人有同样的问题,但我想这不是一个独特的案例。

我的传奇数据看起来很像,

public class MySagaData : IContainSagaData
{
    public virtual Guid Id { get; set; }
    public virtual string Originator { get; set; }
    public virtual string OriginalMessageId { get; set; }
    public virtual int Property1 { get; set; }
    public virtual decimal Property2 { get; set; }
}

案例是,当Property2为1.123456并且它持续存在于我的传奇中时,返回到传奇并将其拾起然后Property2为1.12345。

我知道为什么会这样,NHibernate会创建一个数据库字段DECIMAL(19, 5),但我不知道如何解决我的问题。我不想自己创建表,但让NServiceBus为我做。

任何?

1 个答案:

答案 0 :(得分:2)

我认为如果你想改变默认情况下小数位的映射方式,你必须为NHibernate创建一个自定义方言。例如,如果您使用SQL服务器查看Nhibernate源代码中的MsSql2000Dialect.cs。您可以看到它定义了一个十进制列,如下所示:

RegisterColumnType(DbType.Decimal, "DECIMAL(19,5)");

您可以在java中看到如何执行此操作的示例。它在C#中基本相同 http://shashivelur.com/blog/2008/08/override-hibernate-sql-types-mapping/

一旦你创建了自定义方言,你只需要在你的NHibernate配置中进行设置:

nhCibfig.SetProperty(Environment.Dialect, typeof(MyCustomDecimalDialect).AssemblyQualifiedName)

<property name="dialect">MyAssembly.MyCustomDecimalDialect, MyAssembly</property>