2009-06-03 14 views
6

hola tengo una aplicación que usa nhibernate como orm, necesito almacenar datos que representan el tiempo, ¿cuál es la mejor manera de hacerlo?Time and Nhibernate

nhibenate no sé para convertir el campo de tiempo de db a un intervalo de tiempo, solo cadena.

Respuesta

7

NHibernate admite DateTime, Ticks, TimeSpan and Timestamp. Asegúrese de especificar el tipo explícitamente en su elemento de mapeo ya que los diferentes tipos de tiempo tienen una semántica diferente, por lo que lo que NHibernate está adivinando puede no ser correcto.

Si tiene problemas y sigue teniendo problemas, modifique su publicación para incluir las partes relevantes de su entidad, el archivo de asignación y el problema real que está enfrentando.

Editar:

Por ejemplo, con la clase siguiente para un TimeSpan:

public class MyClass 
{ 
    // Other properties 
    // ... 
    // ... 
    public virtual TimeSpan MyTimeProperty { get; set; } 
} 

Y el archivo de asignación:

<!-- other properties --> 
<property name="MyTimeProperty" type="TimeSpan" /> <!-- Note: NH expects the DB type to be DbType.Int64 --> 

se indica que se está tratando mapear un TimeSpan ("nhibenate no sabe convertir campo de tiempo de db a un intervalo de tiempo, solo cadena"). Si esta es la concordancia de tipo correcta entre .NET (typeofTimeSpan) y la base de datos (DbType.Int64), NH debería hacer esto automáticamente (es decir, no debería necesitar especificar type="TimeSpan"). Entonces, si no funciona, sospecho que hay un problema con la configuración. Puede ser útil si publica la declaración de propiedad/campo con firma completa, la línea <property> para esta propiedad de su archivo de mapeo y la definición de columna de la base de datos.

+0

¿Necesito especificar el tipo en nhibernate con fluidez? –

2

Además, asegúrese de utilizar nulables para sus DateTimes que pueden ser nulos en la base de datos.

DateTime? en lugar de solo DateTime.

De lo contrario, NHibernate intentará inicializar su fecha a un valor predeterminado que probablemente no sea el que desea.