我正在編寫一些測試來檢查驗證過程是否按預期工作並且遇到非常奇怪的行爲。無法使用DateTime.Now在EntityFramework 6.1中使用Code First方法檢索記錄
內的測試方法:
DateTime now = DateTime.Now;
using(CustomDbContext db = new CustomDbContext())
{
Object1 o1 = new Object1();
o1.CompletedOn = now;
db.Object1s.Add(o1);
db.SaveChanges();
var query = from obj in db.Object1s
where obj.CompletedOn == now
select obj;
Assert.AreNotEqual(query.Count(), 0);
}
那一刻我這樣做:
DateTime now = DateTime.Now;
using(CustomDbContext db = new CustomDbContext())
{
Object1 o1 = new Object1();
o1.CompletedOn = now;
db.Object1s.Add(o1);
db.SaveChanges();
DateTime now2 = now.AddSeconds(-1);
var query = from obj in db.Object1s
where obj.CompletedOn > now2
select obj;
Assert.AreNotEqual(query.Count(), 0);
}
它的工作。
在正常情況下,我認爲now
認爲參考DataTime.Now
,因此時間會改變。但是,調試器表明情況並非如此。在兩種情況下通過的時間是相同的,結果存儲在數據庫中。
我使用代碼優先方法構建數據庫,這是什麼Object1:我使用SQL Server作爲我的數據庫
class Object1
{
[Key]
public int Object1ID { get; set; }
[Required]
public DateTime CompletedOn { get; set; }
}
。這有什麼關係嗎?
的值可以存儲在SQL Server看起來像這樣的:2014年9月23日13:14:18.157
日期時間,並因此DateTime.Now()不參考系,它是一個基於值結構 - HTTP:// msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx – 2014-09-23 10:45:02
其中obj.CompletedOn> now2 – Donal 2014-09-23 10:45:28
@MikeMiller是的,我想通了,這就是爲什麼我問這個問題。兩次都應該是相同的,但我無法從數據庫中檢索結果。 – 2014-09-23 10:48:49