2016-11-20 47 views
2

你可能会认为这是其他各地同样的问题,但我检查,并不能找到答案,所以请任何人都可以帮助...EF6设置日期时间为NULL,更新

我有这个类其中有许多其他属性,但让我们专注于此...

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

EndDate和State都在数据库中有一些值。例如, EndDate = 2016-11-20 00:00:00和State =“已关闭”。

我需要做的是改变这些值,所以我有一个动作按钮,这是否......

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; 
} 

但是,当我运行此命令,国家是数据库更改为“打开”但EndDate仍然与以前一样,我的意思是它不会变成NULL。

我在这里做错了什么? 感谢

回答

2

这是因为你没有真正改变结束日期:

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

但它是null当你连接的实体。

所以,你一定要告诉该属性被修改变更跟踪:

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

嗯,这做的工作。稍微改变... db.Entry(rec).Property(r => r.EndDate).IsModified = true;谢谢。 –

+0

但那么'rec.State'如何改变没有问题? – Sampath

+0

当'rec'初始化时@Sampath'rec.State'可能是'null'。 –