2009-08-18 5 views
2

Dans la base de données, j'ai une colonne LastEditTime de type datetime. J'ai utilisé ceci pour suivre la dernière mise à jour de la ligne/insérer le temps. Linq lève une exception en affirmant qu'il ne peut pas insérer de null dans cette colonne.Comment forcer Linq à mettre à jour la dernière modification d'une ligne?

Naturellement, puisque la colonne LastEditTime n'est PAS NUL, une exception est attendue. Mes inserts de requête générés à la main getutcdate(). Comment puis-je demander à Linq de faire la même chose?

Répondre

2

Créez une classe partielle de n'importe quel tableau. Dans la classe partielle ont les éléments suivants:

public partial class MyTable{ 

    partial void OnValidate(System.Data.Linq.ChangeAction action) 
    { 
     LastEditTime = DateTime.Now; 
    } 
} 

OnValidate est toujours appelé avant de faire un database.submitchanges()

+0

Je l'ai utilisé pour la vérification de la concurrence, donc je ne peux pas le changer localement. – Rajesh

1

serait d'attribuer une valeur par défaut La réponse la plus simple pour le champ dans la base de données, à savoir getdate(). Ce qui garantit que le champ est renseigné avec l'heure et la date actuelles, mais uniquement s'il est vide. Linq to SQL est uniquement une couche d'accès au-dessus de SQL, donc c'est assez bête à cet égard et vous devez soit créer les classes Linq to SQL vous-même ou vous assurer que vous remplissez la valeur lorsque vous créez votre instance d'objet que vous ajoutez à la base de données.

Si vous cherchez quelque chose qui se met à jour automatiquement pour assurer la simultanéité à chaque fois que vous mettez à jour l'enregistrement, jetez un oeil au type de champ d'horodatage.

+0

Je suis d'accord - laissez la base de données faire le travail. – belugabob

+0

@belugabob La base de données ne peut fonctionner que sur insertion. – Rajesh

+0

cela ne fonctionnera que pour les INSERTs pas UPDATEs –

0

Vous pouvez créer un déclencheur dans la base de données et l'affecter à l'action de mise à jour. Je sais que cela fonctionne, nous le faisons tout le temps sur notre base de données Postgres.

Je ne sais pas si SQL Server a des déclencheurs, mais vous pouvez utiliser une procédure stockée.

Questions connexes