Я впервые работаю с FluentNHibernate , пытается сопоставить классы с базой данных SQL Express . В целом это работает, но я не могу сопоставить типы свойств Double или Decimal с конкретным масштабом / точностью . Ниже показан результат для одного свойства, которое я тестировал снова и снова с помощью SchemaUpdate.Execute . Ни в коем случае мне не удавалось заставить его работать.
Было бы действительно полезно услышать некоторые объяснения сопоставлений, которые не работают так, как я ожидал (2-8)?
// Ok mappings:
1) Десятичное число : Сопоставление (Функция (x) x Баланс) >> Десятичное число (19, 5)
// Mappings "errors":
2) Двойное число : Сопоставление (Функция (x) x.Balance) .CustomSqlType ("десятичный") >> Десятичный (18,0) m невозможно сопоставить типы свойств Double или Decimal с конкретным масштабом / точностью . Ниже показан результат для одного свойства, которое я тестировал снова и снова с помощью SchemaUpdate.Execute . Ни в коем случае мне не удавалось заставить его работать.
Было бы действительно полезно услышать какое-нибудь объяснение сопоставлений, которые не работают так, как я ожидал (2-8)?
// Ok mappings:
1) Десятичное число : Сопоставление (Функция (x) x Баланс) >> Десятичное число (19, 5)
// Mappings "errors":
2) Двойное число : Сопоставление (Функция (x) x.Balance) .CustomSqlType ("десятичный") >> Десятичный (18,0) m невозможно сопоставить типы свойств Double или Decimal с конкретным масштабом / точностью . Ниже показан результат для одного свойства, которое я тестировал снова и снова с помощью SchemaUpdate.Execute . Ни в коем случае мне не удавалось заставить его работать.
Было бы действительно полезно услышать какое-нибудь объяснение сопоставлений, которые не работают так, как я ожидал (2-8)?
// Ok mappings:
1) Десятичное число : Сопоставление (Функция (x) x Баланс) >> Десятичное число (19, 5)
// Mappings "errors":
2) Двойное число : Сопоставление (Функция (x) x.Balance) .CustomSqlType ("десятичный") >> Десятичный (18,0)
Было бы действительно полезно услышать какое-нибудь объяснение сопоставлений, которые не работают так, как я ожидал (2-8)?
// Ok mappings:
1) Десятичное число : Сопоставление (Функция (x) x Баланс) >> Десятичное число (19, 5)
// Mappings "errors":
2) Двойное число : Сопоставление (Функция (x) x.Balance) .CustomSqlType ("десятичный") >> Десятичный (18,0)
Было бы действительно полезно услышать какое-нибудь объяснение сопоставлений, которые не работают так, как я ожидал (2-8)?
// Ok mappings:
1) Десятичное число : Сопоставление (Функция (x) x Баланс) >> Десятичное число (19, 5)
// Mappings "errors":
2) Двойное число : Сопоставление (Функция (x) x.Balance) .CustomSqlType ("десятичный") >> Десятичный (18,0) - Почему здесь сопоставление по умолчанию с точностью 0?
3) Double : Карта (Функция (x) x.Balance) >> Float, Но; при запуске SchemaValidator после: HibernateException : неправильный тип столбца в FnhDb.dbo.Account для столбца Balance. Найдено: float, Ожидаемая ДВОЙНАЯ ТОЧНОСТЬ
4) Десятичное число : Map (Функция (x) x.Balance) .Scale (9) .Precision (2) >> SqlException : Масштаб (9) для столбца «Баланс» должен находиться в диапазоне от 0 до 2.
5,6) Десятичное или двойное : Карта (Функция (x) xБаланс) .Scale (9) .Precision (2) .CustomSqlType ("numeric") >> numeric (18,0)
7,8) Decimal или Double : карта (функция (x) xBalance) .Scale (9) .Precision (2) .CustomSqlType ("десятичный") >> Десятичный (18,0)
РЕДАКТИРОВАТЬ: Я включаю код и hbm.xml (экспорт) для случая (4) сюда:
Public Class AccountMap
Inherits ClassMap(Of Account)
Public Sub New()
MyBase.New()
Id(Function(x) x.Id).GeneratedBy.Identity()
Map(Function(x) x.Balance).Scale(9).Precision(2)
Map(Function(x) x.Deposits)
Map(Function(x) x.WithDrawals)
End Sub
End Class
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="false">
<class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="RoboTrader.Account, RoboTrader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Account`">
<id name="Id" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="identity" />
</id>
<property name="Balance" type="System.Decimal, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Balance" precision="2" scale="9" />
</property>
<property name="Deposits" type="System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Deposits" />
</property>
<property name="WithDrawals" type="System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="WithDrawals" />
</property>
</class>
</hibernate-mapping>
EDIT2:
Кстати, это не проблема VB . У меня точно такая же проблема в проекте C # . Может быть, конфигурация MsSql2008 несовместима с Sql Express 2008 R2 ?
EDIT3:
Option Strict On
Импортирует System.Collections.Generic Импортирует System.Text Система импорта
Public Class Account
Public Sub New()
MyBase.New()
End Sub
Private _Id As Integer
Private _Balance As Double
Private _Deposits As Integer
Private _WithDrawals As Integer
Public Overridable Property Id() As Integer
Get
Return _Id
End Get
Set(ByVal value As Integer)
_Id = value
End Set
End Property
Public Overridable Property Balance() As Double
Get
Return _Balance
End Get
Set(ByVal value As Double)
_Balance = value
End Set
End Property
Public Overridable Property Deposits() As Integer
Get
Return _Deposits
End Get
Set(ByVal value As Integer)
_Deposits = value
End Set
End Property
Public Overridable Property WithDrawals() As Integer
Get
Return _WithDrawals
End Get
Set(ByVal value As Integer)
_WithDrawals = value
End Set
End Property
End Class