gpt4 book ai didi

NHibernate:错误的列类型:找到 float ,预期 double

转载 作者:行者123 更新时间:2023-12-01 01:21:48 25 4
gpt4 key购买 nike

我有一个具有属性的域实体类:

public virtual double? Result { get; set; }

该属性正在使用 NHibernate 3.2 mapping-by-code 内容进行映射:
public class SampleResultMap : ClassMapping<SampleResult>
{
public SampleResultMap()
{
Id(c => c.Id,
map => map.Generator(Generators.Identity));
Property(c => c.Result, map =>
{
map.NotNullable(false);
});
// More properties, etc.
}
}

这工作正常,并且 SQL Server 2008 R2 表是使用浮点数据类型正确创建的。

然而, SchemaValidator.Validate调用给出了这个错误:
NHibernate.HibernateException was unhandled
Wrong column type in Foo.dbo.SampleResult for column Result.
Found: float, Expected DOUBLE PRECISION

查看调用 SchemaExport.Create 的 SQL生成表有这个定义:
create table SampleResult (
Id INT IDENTITY NOT NULL,
DateEnteredUtc DATETIME not null,
ElementId INT not null,
Unit INT not null,
ResultText NVARCHAR(50) null,
[Result] DOUBLE PRECISION null,
Detected BIT not null,
Qualifier NVARCHAR(10) null,
SampleId INT not null,
Deleted BIT not null,
primary key (Id)
)

从 NHibernate 3.2 源代码的快速阅读来看,验证器似乎正在将“DOUBLE PRECISION”与“float”进行比较。

有没有其他人看到这个?我认为这是一个错误,但我之前没有使用过验证器,所以想知道我是否做错了什么。

最佳答案

我在 SQLite 数据库上本地生成的 ID 有一个类似的问题,这是因为 SQLite 只支持整数列的自动增量。

NHibernate 已经正确地将 ID 列创建为整数,但是当它验证它时,它认为它应该是一个 int 而不是一个整数。因为 int 只是映射到 SQLite 上的整数,所以我刚刚创建了一个新方言来使用整数而不是 int,现在它可以正常工作了。

由于 DOUBLE PRECISION 与 SQLServer 上的 FLOAT(53) 相同,因此它可能是同一件事,它看到的是浮点数而不是 double 数。作为解决方法,您可以尝试更改方言以使用 FLOAT(53) 代替:

using System.Data;
using NHibernate.Dialect;

public class UpdatedMsSql2008Dialect : MsSql2008Dialect
{
public UpdatedMsSql2008Dialect()
: base()
{
RegisterColumnType(DbType.Double, "FLOAT(53)");
}
}

SQLServer dialect source似乎表明它应该工作。不过,肯定看起来验证器存在错误。

关于NHibernate:错误的列类型:找到 float ,预期 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8761193/

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