【问题标题】:LINQ's *OrDefault throws exceptions in MVC3 + ActiveRecordLINQ 的 *OrDefault 在 MVC3 + ActiveRecord 中引发异常
【发布时间】:2012-06-07 05:06:21
【问题描述】:

this question 的推动下,我决定在我的 MVC3/ActiveRecord 应用程序中尝试这个。

我有一堆模型已经在工作,还有一些视图可以与这些模型一起工作。这里没什么特别的。我的一个模型叫做AppSession

基于上述问题,我预计这会起作用:AppSession.FirstOrDefault(a => ...) ?? null

没有用。我仍然收到InvalidOperationExceptionFirstOrDefaultSingleOrDefault 也是如此。我最终将我的电话转入 try/catch 以绕过它。

我在这里做错了什么?

编辑:根据要求,实际代码为:

void getAnAppSession() {
    AppSession sessions = project.AppSessions.FirstOrDefault(a => a.Ip == ip && a.MacAddress == macAddress && a.Platform == platform && a.Version == version && a.EndTime == null)
}

ipmacAddressplatformversion 都是可验证不为空的方法变量。我的AppSessions 架构(以及相应的我班级的属性)包括:

  • ID(整数,非空)
  • StartDate(日期时间,非空)
  • EndDate(日期时间,空)
  • Ip(字符串,非空)
  • MacAddress(字符串,非空)
  • 平台(字符串,非空)
  • 版本(字符串,非空)

【问题讨论】:

  • 在调用 first 或 default 之前是否检查 appsession 是否为空?
  • 你能把你写...的实际代码贴出来吗?也许这就是引发异常的地方。
  • 你不需要写?? null。这没有任何用处。
  • 那个??在链接问题的获胜答案中被提及。我没有检查 a => a != null,如果这就是你的意思。我不会发布实际代码,因为它没有意义;好的,好的。
  • InvalidOperationException 的信息是什么?

标签: asp.net-mvc-3 castle-activerecord


【解决方案1】:

也许您的project.AppSessions 本身为空?这将导致FirstOrDefault() 方法抛出错误。您可能想在调用 FirstOrDefault 之前检查它是否为 null,如果它为 null,则创建一个新的 AppSession 对象:

AppSession sessions = (project.AppSessions as AppSession ?? new AppSession())
    .FirstOrDefault(a => a.Ip == ip && 
                    a.MacAddress == macAddress && 
                    a.Platform == platform && 
                    a.Version == version && 
                    a.EndTime == null);

【讨论】:

  • 宾果游戏。新手错误:)(好吧,ORM 复杂性错误)
猜你喜欢
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2011-11-11
  • 2016-02-23
  • 2012-09-29
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多