【发布时间】:2012-09-06 02:17:34
【问题描述】:
我有一个具有属性的域实体类:
public virtual double? Result { get; set; }
该属性正在使用 NHibernate 3.2 按代码映射的东西进行映射:
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”进行比较。
还有其他人看过吗?我认为这是一个错误,但我之前没有使用过验证器,所以想看看我是否做错了什么。
【问题讨论】:
-
一开始你说你将它声明为
double?。所以是双倍还是浮动? -
它是一个 C#
double?,作为可空的float列存储在 SQL Server 中;这些都是双精度表示。我知道,这很令人困惑,SQL Serverreal是 C#float,它们都是单精度值。 -
有什么解决方案吗?我遇到了同样的问题...
-
不幸的是,没有。我试图将这个问题发布到 nhusers 和 nhibernate-development Google 组,但组版主从未接受他们发布。去图吧。
标签: nhibernate