无法查询定义为IsOptional的枚举的空值

时间:2015-06-18 22:29:11

标签: c# ef-code-first entity-framework-6 ef-fluent-api

我已经通过Fluent API将实体的Enum属性定义为IsOptional。数据库反映了IsOptional,因为它将其显示为可空类型。当我尝试查询此Entity属性的空值时,我收到以下错误:

The 'UserType' property on 'Group' could not be set to a 'null' value. 
You must set this property to a non-null value of type 'UserType'.

查询如下:

var groups = (from g in db.Groups
              let reqs = from r in db.Requests 
              where r.Id == requestId from gg in r.Groups select gg.Id                                  
              where g.ContentArea.Id == db.Requests.FirstOrDefault(o => o.Id == requestId).ContentArea.Id
              where !reqs.Contains(g.Id)
              where (g.UserType == db.Requests.FirstOrDefault(r => r.Id == requestId).User.UserType || g.UserType == (UserType?)null)
              select g).ToList();

,特别断开的部分是在OR语句之后

g.UserType == (UserType?)null

我试过将g.UserType与null进行比较,设置UserType的实例? nullType = null并比较但似乎没有任何效果。这似乎是EF的缺点。有什么建议吗?

编辑:按要求包含整个查询。

1 个答案:

答案 0 :(得分:1)

问题不在于声明的结构,而是在EF试图实现的实体中。 Group有一个不可为空的属性UserType。但是在数据库中它是可空的,并且一些返回的记录具有空值。

所以你要么必须使属性可以为空:

UserType? UserType { get; set; }

或确保该语句不会返回空值。