无法首先使用新的日期时间值ef代码更新行

时间:2014-06-09 17:40:31

标签: c# asp.net-mvc-4 datetime linq-to-sql

编辑
查询是正确的,我得到的错误是由于下面的注销fx被调用了两次,一次来自html href,另一次是来自ajax。 ajax调用具有UID,而Html为null,因此引发了异常 - 后来调用了html。感谢您的投入。由于我是stackoverflow的新手,我不知道如何处理答案/评论,因为它们没事。

如何使用新的日期时间值更新行?

          try
            {
                var last = (from l in db.loginActivity
                                 where l.UID.Equals(_uid)
                                 orderby l.LastLogin descending
                                 select l).FirstOrDefault();

                last.LastLogout = DateTime.Now;
                db.Entry(last).State = EntityState.Modified;
                db.SaveChanges();
            }

当我使用FirstOrDefault() - >错误:对象引用未设置为对象的实例。 当我使用First() - >错误:序列不包含任何元素。 好吧,数据库有几条记录。我已经在某个地方使用了这个片段,它就像魅力一样,只有当更新的单元格不是日期时间类型时。
有什么建议吗?

2 个答案:

答案 0 :(得分:1)

错误告诉您没有找到匹配UID的记录,因此last为空。您需要检查它是否为空:

var last = ...;
if (last != null) {
    last.LastLogout = DateTime.Now;
    db.Entry(last).State = EntityState.Modified;
    db.SaveChanges();
}

或者,由于你是在try / catch中执行此操作,因此可以使用First而不是FirstOrDefault,并且只有在找不到时才会捕获异常First抛出记录。

至于为什么last将返回null,请设置断点并确保_uid符合您的预期。

答案 1 :(得分:1)

看起来没有项目满足您的过滤条件:其中l.UID.Equals(_uid) 您是否尝试从查询中删除“where”?