2012-02-27 4 views
4

J'ai donc une colonne nommée Timestamp dans ma base de données avec une valeur par défaut de GetDate().getdate() ne fonctionne pas avec Entity Framework

Chaque fois que j'utilise Entity Framework pour insérer un enregistrement, Timestamp est null.

Pourquoi est-ce le cas?

+3

S'il vous plaît expliquer le d propre vote – broke

+0

Pouvez-vous poster une version réduite du script envoyé à SQL? Juste les parties qui référencent directement 'Timestamp' ou des parties de celui-ci (par exemple il y a probablement un paramètre de requête) – Guvante

Répondre

2

Essayez de changer de type en datetime2. Voir ce article pour plus d'informations. Essayez également d'utiliser StoreGeneratedPattern calculé

essayez de changer de datetime2 puis contourner le problème en ajoutant Trigger

SET NOCOUNT ON; 
    UPDATE ASBLAH 
    SET YourFieldChangeTime = getdate() 
    WHERE YOURId IN(SELECT AS_ID FROM INSERTED) 

Si vous avez besoin de lire les données de retour cette date, vous pouvez le faire après context.SaveChanges()

context.Refresh(System.Data.Objects.RefreshMode.StoreWins, p); 
+0

Modifié ils tapent, mais j'obtiens toujours le même résultat. – broke

+0

Le lien ne fonctionne pas, mais fonctionne sans le 67 à la fin, mais c'est juste une page de détails sur la classe 'DateTime2', c'est ce que vous vouliez? – Guvante

+0

J'ai fini par aller avec la gâchette. Plus facile à long terme. – broke

1

Entity Framework crée probablement une instruction d'insertion qui inclut tous les champs, null étant la valeur de Timestamp, puisque vous n'en avez pas fourni. Si null est autorisé pour cette colonne, alors c'est ce qui sera inséré. Si null n'est pas autorisé, la valeur par défaut sera utilisée, ce qui se traduira par . Vous devez autoriser null pour votre table?

+0

Je ne suis pas exactement sûr de ce que vous entendez par" valeur correcte ". Suggérez-vous de basculer les nulls autorisés en SQL? – broke

+0

@broke: Ah désolé, oui. La valeur correcte est un terme générique pour une valeur qui peut être stockée dans ce champ. Donc, dans ce cas, autoriser les valeurs nulles fait de null une valeur correcte. Je vais mettre à jour ma réponse. – Guvante

+0

Il est intéressant de noter que lorsque je désactive les valeurs nulles, rien n'est inséré. – broke

3

modifier votre EDM, effectuez les modifications suivantes:

Type="datetime" 
Nullable="false" 
StoreGeneratedPattern ="Computed" 

ref: 
http://bibby.be/2009/07/entity-framework-sql.html 
+2

c'est la bonne façon de le résoudre mais soyez conscient que chaque fois que vous mettez à jour le modèle, vous devez le changer à nouveau – Cenas

Questions connexes