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

Nhibernate NServiceBus:如何扩展十进制列的比例?,nhibernate,nservicebus,Nhibernate,Nservicebus,我们使用的是小数位数为六位小数的小数,即1.123456。现在,由于我们正在使用NServiceBus,并且我们需要在我们的saga数据中保留这个值,所以我们遇到了麻烦 当我们回到传奇故事中,再次获得我们的价值时,价值是1.12345。我没有发现任何人有同样的问题,但我想这不可能是一个独特的情况 我的传奇数据看起来有点 public class MySagaData : IContainSagaData { public virtual Guid Id { get; set; }

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

当我们回到传奇故事中,再次获得我们的价值时,价值是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为我创建


有人吗?

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

RegisterColumnType(DbType.Decimal, "DECIMAL(19,5)");
您可以在这里看到一个用java实现的示例。在C中基本上是一样的#

创建自定义方言后,只需在NHibernate配置中进行设置:

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

MyAssembly.myCustomDecimalDialogue,MyAssembly

那么,这是唯一的解决方案吗?实际上我只希望在我的财产中添加一个属性。。。由于NHibernate封装在NServiceBus中,我希望有一个比使用NHibernate源代码更好的解决方案。。。。或者只是在Sql Server中更改数据类型,我成功地尝试了这一点。您不能仅使用NHibernate属性来定义列映射。手动更改数据类型的解决方案将起作用,但它确实解决了让nservicebus/nhibernate为您创建表的问题。
<property name="dialect">MyAssembly.MyCustomDecimalDialect, MyAssembly</property>