Iプロパティとドメインエンティティクラスがある:NHibernateは:間違ったカラムタイプ:実測フロート、予想倍精度
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テーブルはfloatのデータ型で正しく作成されます。
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)
)
の迅速な読書から:SchemaExport.Create
への呼び出しは、テーブルのこの定義がある生成SQLを見てみると
NHibernate.HibernateException was unhandled
Wrong column type in Foo.dbo.SampleResult for column Result.
Found: float, Expected DOUBLE PRECISION
:
しかし、SchemaValidator.Validate
呼び出しがこのエラーを与えますNHibernate 3.2のソースは、バリデータが "DOUBLE PRECISION"と "float"を比較しているようです。
他にもこれを見ましたか?私はそれがバグだと仮定しますが、私は何かが間違っているかどうかを知りたいと思う前に、バリデータを使用していません。
最初は「ダブル」と宣言しています。だから、それは二重か浮きですか? –
これはC# 'double?'であり、SQL Serverにはヌル可能な 'float'カラムとして格納されています。これらは両方とも倍精度表現です。わかりました、それは混乱しています、SQL Serverの 'real'は単精度値であるC#' float'です。 – gdoten
これに関する解決策はありますか?私は同じ問題に遭遇しています... – mCasamento