C# datetime和SQL datetime进行等值比较失败

3

我将尝试在C# datetime和SQL datetime之间进行相等比较,然而由于存储这些值的精度问题,似乎该操作会失败。

假设我有一个非常简单的SQL表,拥有以下字段:

ID (PK, int, not null) - identity
Title (text, null)
UpdateTime (datetime, not null)

我通过Entity Framework创建一个类对象,将其更新时间设置为DateTime.Now,如下所示:

DateTime now = DateTime.Now;
Title.UpdateTime = now;

当我将我的新对象插入表格时,所有值似乎都被正确存储了。现在我想要为我的对象创建的ID。

这就是问题出现的地方。我尝试通过LINQ获取ID:

Title.ID = context.DBTitles.Where(x=>x.UpdateTime == now).FirstOrDefault().ID;

由于查询返回null,尽管我插入的“现在”应该与插入到我的表中的“现在”相同,因此会引发异常。

所以我的问题是:如何确保我的C# datetime等同于存储在SQL中的datetime?最好的方法是获取我的ID吗?


哪个关系型数据库管理系统?SQL Server 2008? - Tim Lehner
是的,2008年。抱歉没有具体说明。 - MadHenchbot
2个回答

6
如果你正在使用SQL Server,使用DateTime2代替。它具有与.NET类型相同的精度。

谢谢您!事实证明,我不需要再次查询表以检索我的ID,但这些信息非常有帮助。如果可以的话,我会将它们都标记为答案。 - MadHenchbot
谢谢,Magnus。这对我起到了作用。在我的情况下,我正在使用批处理日期填充一个传统的DateTime字段称为LastUpdated,然后在批处理之后,正在查询所有不匹配批处理日期的记录,以便我可以填写一个单独的DeletedOn列。等于(或不等于)比较总是失败。按照您的建议更改了列类型,现在我像弗林一样顺利。=) - Frog Pr1nce

3

如果你正在使用Linq,那么你插入的对象在提交时会自动分配ID,你不需要“重新调用”它。


它似乎没有自动返回(也许我错过了什么步骤?)当它进入时,ID为0,在我的context.SaveChanges()调用后仍为0。 - MadHenchbot
context.SubmitChanges();之后会发生什么? - Haedrian
天啊,你是对的。在检查ID之前,我让DB对象超出了范围...谢谢你,因为你找到了我的问题的真正根源,所以我给你加1。 - MadHenchbot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接