gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:59:42 26 4
gpt4 key购买 nike

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

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

这是我的 C# 属性:

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 更新语句的参数片段:
@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?));
}

这样做纠正了我的小数精度。

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

关于nhibernate - 使用 NHibernate 3.2 和 FluentNHibernate 1.3 截断的十进制字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10323833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com