2009-06-03 7 views
6

bonjour j'ai une application qui utilise nhibernate comme orm, j'ai besoin de stocker des données qui représente le temps, quelle est la meilleure façon de le faire? Nhibenate ne sait pas convertir le champ de temps de db à une échelle de temps, seule chaîne. NHibernate prend en charge DateTime, Ticks, TimeSpan and TimestampTime and Nhibernate

Répondre

7

Assurez-vous de spécifier explicitement le type sur votre élément de mappage car les différents types de temps ont des sémantiques différentes, ce que NHibernate devine peut ne pas être correct.

Si vous rencontrez et avez toujours des problèmes, modifiez votre publication pour inclure les parties pertinentes de votre entité, le fichier de mappage et le problème réel que vous rencontrez.

Edit:

Par exemple, avec la classe suivante pour une TimeSpan:

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

Et le fichier de mapping:

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

Vous indiquez que vous essayez de map un TimeSpan ("nhibenate ne sais pas pour convertir le champ de temps de db à un timespan, seule chaîne"). Si c'est le bon type correspondant entre .NET (typeofTimeSpan) et la base de données (DbType.Int64), NH devrait le faire automatiquement (c'est-à-dire que vous ne devriez pas avoir besoin de spécifier type="TimeSpan"). Donc, si ça ne fonctionne pas, je suppose qu'il y a un problème avec la façon dont vous avez configuré les choses. Il peut être utile si vous postez la déclaration de propriété/champ avec la signature complète, la ligne <property> pour cette propriété à partir de votre fichier de mappage et la définition de colonne de la base de données.

+0

Dois-je spécifier le type dans un nhibernate fluide? –

2

De même, assurez-vous d'utiliser des valeurs Null pour vos DateTimes qui peuvent être NULL dans la base de données.

DateHeure? au lieu de simplement DateTime. Si ce n'est pas le cas, NHibernate tentera d'initialiser votre date à une valeur par défaut qui n'est probablement pas celle que vous voulez.