使用NHibernate 3.2和FluentNHibernate 1.3截断的十进制字段

使用NHibernate 3.2和FluentNHibernate 1.3截断的十进制字段,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我有一个例子,当保存到数据库时,十进制字段被截断为小数点后五位。即使我以小数点后10位的精度映射了它们,也会发生这种情况 我正在SQL Server 2008中使用NHibernate 3.2.0.4000和FluentNHibernate 1.3.0.717 这是我的财产: public virtual decimal? MyDecimalField { get; set; } 我已尝试执行自动映射覆盖: mapping.Map(x => x.MyDecimalField).Preci

我有一个例子,当保存到数据库时,十进制字段被截断为小数点后五位。即使我以小数点后10位的精度映射了它们,也会发生这种情况

我正在SQL Server 2008中使用NHibernate 3.2.0.4000和FluentNHibernate 1.3.0.717

这是我的财产:

public virtual decimal? MyDecimalField { get; set; }
我已尝试执行自动映射覆盖:

mapping.Map(x => x.MyDecimalField).Precision(28).Scale(10);
我还尝试过对字段进行显式映射:

Map(x => x.MyDecimalField).Precision(28).Scale(10);
执行架构导出时,将正确创建表:

create table MyTable (
    Id UNIQUEIDENTIFIER not null,
   MyDecimalField DECIMAL(28, 10) null,
   primary key (Id)
)
使用值5.1234567890,以下是生成的SQL update语句中的参数片段:

@p31 decimal(28,5)
@p31=5.12345
如果我使用XML映射,我能够正确地执行此操作:

<property name="Decimal01" precision="28" scale="10"/>

我已经删除了十进制字段的所有约定,但仍然存在问题

由于基于XML的映射是有效的,这让我相信这是Fluent的一个问题。还有什么我可能错过的建议吗

谢谢,
跳过

我将在这里回答我自己的问题。感谢@Firo给了我一些提示,让我找到了解决方案

我有一个设置字符串字段默认长度的约定:

    public void Apply(IPropertyInstance instance)
    {
        instance.Length(350);
    }
但我的验收标准并没有排除十进制字段。我添加了一些验收标准,以排除小数:

    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
    {
        criteria
            .Expect(x => x.Type != typeof(decimal) && x.Type != typeof(decimal?));
    }
public void Accept(IAcceptanceCriteria标准)
{
标准
.Expect(x=>x.Type!=typeof(十进制)和&x.Type!=typeof(十进制?);
}
这样做修正了我的十进制精度


有趣的是,我的默认字符串长度350没有出现在我导出的XML映射文件中的十进制字段中。但FNH似乎仍在以某种方式使用它。这对我来说似乎是一个FNH错误。

如果使用decimal而不是nullable,是否会发生这种情况?@Firo-不可nullable decimal也存在同样的问题。然后,唯一能看到差异的方法是输出FNH生成的内容
new PersistanceModel();model.Add(newclassemap());模型写入(控制台输出)
@Firo-尝试了您的建议并使用了FNH生成的XML。它看起来非常类似于我手动创建的映射。当我使用FNH生成的XML时,一切正常。所以仍然不确定为什么FNH映射不起作用。FNH只是直接提供您看到的xml,使用FNH或FNH生成的xml之间应该没有区别。