Estoy trabajando por primera vez con FluentNHibernate, tratando de asignar clases a base de datos SQL Express. En general, funciona, pero no puedo asignar tipos de propiedad dobles o decimales a la escala/precisión específica. A continuación se muestra el resultado de una sola propiedad que probé una y otra vez con SchemaUpdate.Execute. En ningún caso fui capaz de hacer que funcione.Mapeo FluentNHibernate; No se puede asignar el doble o el decimal con escala/precisión
¿Sería realmente útil escuchar alguna explicación de las asignaciones que no funciona como espero (2-8)?
// Ok mappings:
1) decimal: mapa (función (x) x.Balance) >> decimal (19, 5)
// Mappings "errors":
2) Doble: Mapa (Función (x) xBalance) .CustomSqlType ("decimal") >> Decimal (18,0) - ¿Por qué 0 la precisión es la asignación predeterminada aquí?
3) Doble: mapa (función (x) x.Balance) >> flotador, Pero; al ejecutar SchemaValidator después de: HibernateException: Tipo de columna incorrecta en FnhDb.dbo.Cuenta para la columna Balance. Encontrado: flotador, que se espera PRECISION DOBLE
4) decimal: Mapa (función (x) x.Balance) .Scale (9) .precision (2) >> SqlException: La escala (9) para la columna 'Saldo' debe estar dentro del rango de 0 a 2.
5,6) decimal o doble: mapa (función (x) x.Balance) .Scale (9) .precision (2). CustomSqlType ("numérico") >> numérico (18,0)
7,8) decimal o doble: mapa (función (x) x.Balance) .Scale (9) .precision (2) .CustomSqlType ("decimal") >> decimal (18,0)
EDIT: que incluyen código y hbm.xml (exportación) para el caso (4) aquí:
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:
Por cierto, esto no es un problema VB. Tengo exactamente el mismo problema en un proyecto C#.¿Puede ser la configuración MsSql2008 que no es compatible con Sql Express 2008 R2?
Edit3:
Option Strict On
importaciones System.Collections.Generic importaciones System.Text Imports System
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
Ai .. ¡Gracias! Comprobé esto exactamente (Def. De precisión/escala), pero también lo he leído mal ... Bueno, eso me deja con una sola pregunta: ¿Cómo es que no puedo mapear un doble a Decimal/¿numérico? Como siempre creará una (18,0) columna? – bretddog
Depende de cómo haya declarado la propiedad 'Balance' en su objeto. ¿Puedes publicar la declaración del objeto POCO? – Yogesh
Ok, agregué toda la clase anterior. Y ahora mapear como dijiste: Mapa (Función (x) xBalance) .CustomSqlType ("decimal"). Precisión (9) .Scale (2) – bretddog