Je suis en train d'approfondir (un peu à) dans l'auto-apprentissage avec l'interface fluide de NHibernate. Très bonne chose, mais j'ai rencontré un petit problème avec DateTimes. J'ai besoin de changer le format de données en horodatage, sinon NHibernate tronque les millisecondes.Automatisation NHibernate: Alter DateTime à Timestamp
J'ai trouvé plusieurs sources d'information, la meilleure était: AutoMapping Info 1 où il change le nom de la colonne et le type d'une propriété. Le problème est, il y avait un changement dans les automappings fluent, selon this document.
Maintenant, je ne sais pas comment obtenir l'automapping pour "changer le type". J'ai essayé le code suivant, mais je suis bloqué. Encore une fois, ce que je veux faire est simplement dire l'automapper à:
Utilisez des horodatages pour DateTime pour éviter la troncature de millisecondes lors de l'utilisation de l'automapping.
Quelqu'un a eu une idée? Code à ce jour:
public class DateTimeToTimestamp : IClassConvention
{
public bool Accept(IClassMap target)
{
return target.GetType() == typeof(DateTime);
}
public void Apply(IClassMap target)
{
throw new NotImplementedException();
}
}
Ok, merci beaucoup pour la réponse ... Son assez de confort pour moi de cette façon. Si j'ai vraiment 3 classes qui ont besoin de cette précision, je peux m'occuper de l'écrire trois fois. D'autant plus que la cartographie de toutes les autres propriétés fonctionne encore parfaitement, et le code suivant ne fait qu'alterner la propriété que je veux ... Très sympa!
Si quelqu'un connaît une approche plus générique, n'hésitez pas à l'ajouter, mais pour l'instant, je suis heureux!
Code pour mon cas était:
public class DateTimeToTimestamp : IAutoMappingOverride<CustomTime>
{
public void Override(AutoMap<CustomTime> mapping)
{
mapping.Map(x => x.ScanDate).CustomTypeIs("timestamp");
}
}
Merci pour cela, fonctionne un régal! –
Pour étendre la prise en charge de DateTime Nullable et voir comment ajouter des conventions à la configuration, voir [cette réponse] (http://stackoverflow.com/a/30753122/411428).J'aime mieux l'implémentation 'Apply()' dans cette réponse. Notez que les deux réponses fonctionnent également si vous n'utilisez pas l'automapping mais avez des classes de mapping dédiées. – Manfred
Vous devriez vraiment utiliser 'criteria.Expect (x => x.Type == typeof (DateTime) || x.Type == typeof (DateTime?));' –