2009-02-05 5 views
4

Je pense que je devrais mentionner que j'essaye d'obtenir que Entity Framework \ SQL fasse quelque chose que j'avais l'habitude d'utiliser avec Rails. Je veux juste juste savoir la «meilleure» façon d'avoir des valeurs de colonne created_at & updated_at automatiques pour les enregistrements que j'insère/mise à jour dans la base de données.Sql Server (Entity Framework): created_at, updated_at Colonnes

En ce moment j'ai accroché dans l'événement ObjectContext.SavingChanges et les choses fonctionnent bien. Après avoir écrit et testé mon code, je me rends compte qu'il existe peut-être un moyen meilleur ou plus rapide de le faire.

Répondre

9

Une méthode consiste à utiliser des déclencheurs d'insertion/mise à jour pour définir les colonnes created_at et updated_at sur l'heure actuelle.

Le Insérer déclencheur ressemblerait à quelque chose comme ceci:

CREATE TRIGGER [dbo].[inserted_myTable] ON [dbo].[myTable] AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    UPDATE [dbo].[myTable] Set AdmitDateTime = GetDate() where pkid in (SELECT pkid FROM Inserted) 
END 


La mise à jour déclencheur ressemblerait à quelque chose comme ceci:

CREATE TRIGGER [dbo].[updated_myTable] ON [dbo].[myTable] AFTER UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 
    UPDATE [dbo].[myTable] Set AdmitDateTime = GetDate() where pkid in (SELECT pkid FROM Inserted) 
END 


Un avantage de l'approche de déclenchement est que l'heure et la date seront toujours dans le même fuseau horaire. Un autre avantage est que si quelqu'un modifie l'enregistrement de la base de données en dehors de votre application, les champs sont toujours mis à jour.

+0

+1, merci. À quoi sert le NOCOUNT? – Greg

+0

Voir ici pour une explication de NOCOUNT: http://msdn.microsoft.com/en-us/library/ms189837.aspx –