2010-06-16 6 views
0

Dans mes domaines, à des fins d'audit, j'ai la propriété UpdatedOn. Maintenant, je l'ai mis au client avant la mise à jour de DateTime.Now. Mais beaucoup d'utilisateurs ont des datetime incorrects sur leurs machines, donc j'ai besoin d'utiliser le datetime du serveur (getdate(), now() ...) Comment puis-je implémenter cette stratégie?NHibernate. Serveur actuel datetime()

Répondre

0

Je vais suggérer cela http://mastercsharp.com/article.aspx?ArticleID=66&TopicID=7 pour vous puisque ce pourrait être ce que vous cherchez. Ou vous pouvez simplement créer un service Web pour renvoyer l'heure du serveur ...

+0

C'est très difficile pour cette pensée facile. Je veux utiliser mon serveur SQL pour retourner son datetime –

+0

ouais, j'ai pensé à ce sujet après que j'ai posté ceci :) – Buildstarted

1

Vous pouvez faire de cette propriété une propriété en lecture seule/requête uniquement et ainsi ignorer entièrement le code d'application. Il suffit de définir une valeur par défaut lors de l'insertion d'une ligne

CREATE TABLE [dbo].[FooTable](
. 
. 
. 
[UpdatedOn] [datetime] NOT NULL CONSTRAINT [DF_FooTable_UpdatedOn] DEFAULT (Getdate()), 
. 
. 

ce qui garantira que lorsqu'une valeur est ne passe pas alors la colonne prendra la valeur de Getdate()

1

Dans notre projet, nous personnalisé notre MsSql2005Dialect.

public class MsSql2005Dialect : NHibernate.Dialect.MsSql2005Dialect 
{ 
    public MsSql2005Dialect() 
    { 
     RegisterFunction("getDate", 
      new NoArgSQLFunction("convert(datetime, floor(convert(float, getdate())))", NHibernateUtil.DateTime, false)); 
     RegisterFunction("getDateTime", 
      new NoArgSQLFunction("getdate", NHibernateUtil.DateTime, true)); 
    } 
} 

et nous enregistrons ce dialecte personnalisé dans nhibernatehelper: Dialect dialecte = Dialect.GetDialect (configuration.Properties);

registre hibernate.cfg.xml: SAGP.DataAccess.Dialects.MsSql2005Dialect, SAGP.DataAccess, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null

et utiliser dans hql comme: "select getDateTime() de RandomTableFromYourSystem";

Questions connexes