Elb*_*cho 5 c# asp.net entity-framework exception
我使用join方法编写了两个LINQ查询.本质上,如果我切换要连接的对象的顺序,查询将不再起作用并抛出错误:
"无法创建类型为'Domain.Entities.UsersSitesRole'的常量值.在此上下文中仅支持基本类型(例如Int32,String和Guid')."
var foo2 = //works
from p in privilegesForUser
join c in repository.Child on p.SiteId equals c.Child_SiteID
select new { ChildID = c.Child_ChildID, name = c.Child_FirstName, site = c.Child_SiteID, p.PrivilegeLevel };
var foo3 = //throws exception
from c in repository.Child
join p in privilegesForUser on c.Child_SiteID equals p.SiteId
select new { ChildID = c.Child_ChildID, name = c.Child_FirstName, site = c.Child_SiteID, p.PrivilegeLevel };
Run Code Online (Sandbox Code Playgroud)
该对象privilegesForUser
是从我的实体框架上下文(UsersSiteRole)派生的实体列表,repository.Child
也是IQueryable<Child>
来自我的EF上下文的实体.
这是由 EF 解析它在扩展方法中获取的表达式树的方式引起的。
在很多情况下,查询在逻辑上是正确的并且在IEnumerable
(Linq to Objects)上执行得很好,但在 Linq to Entities 上却失败了。基本上,将任何逻辑表达式树编译成正确的 SQL 语句几乎是不可能的(SQL 并不理想,而且离面向对象的世界还很远),这就是 EF 放弃的情况。随着时间的推移,您会习惯于了解什么有效、什么无效。