2016-11-20 1 views
2

Vous pouvez penser que c'est même question que d'autres autour, mais je l'ai vérifié et ne peut pas trouver une réponse, alors s'il vous plaît si quelqu'un pouvait aider ...EF6 Set DateTime nul sur mise à jour

Je cette classe qui a bien d'autres propriétés, mais concentrons-nous dans ce 2 ...

public class MyClass 
{ 
    public DateTime? EndDate { get; set; } 
    public string State { get; set; } 
} 

Les deux EndDate et de l'Etat a des valeurs dans la base de données. Ex. EndDate = 2016-11-20 00:00:00 et State = "Fermé".

Ce que je dois est de changer ces valeurs, j'ai donc un bouton d'action qui fait cela ...

using (MyContext ctx = new MyContext()) 
{ 
    MyClass rec = new MyClass { Id = Id }; 
    db.MyClasses.Attach(rec); 
    rec.State = "Opened"; 
    rec.EndDate = null; 
    db.Configuration.ValidateOnSaveEnabled = false; 
    ctx.SaveChanges(); 
    db.Configuration.ValidateOnSaveEnabled = true; 
} 

Mais, quand je lance cette commande, l'État est modifié dans la base de données à « Ouvert » mais le EndDate reste la même valeur qu'avant, je veux dire qu'il ne tourne pas NULL.

Qu'est-ce que je fais mal ici? Merci

Répondre

2

C'est parce que vous ne modifiez pas réellement la date de fin:

MyClass rec = new MyClass { Id = Id }; 
db.MyClasses.Attach(rec); 
... 
rec.EndDate = null; 

Mais il était null quand vous attaché l'entité.

Vous devez dire le suivi du changement que la propriété est modifiée:

db.Entry(rec).Property(r => r.EndDate).IsModified = true; 
+0

bien qui a fait le travail. Avec un léger changement ... db.Entry (rec) .Property (r => r.EndDate) .IsModified = true; Merci. –

+0

mais comment 'rec.State' a-t-il changé sans problème? – Sampath

+0

@Sampath 'rec.State' est probablement' null' quand 'rec' est initialisé. –