C# EF使用SQL查询加载相关实体
我有一个sql语句,希望返回一个具有相关部门实体的人员列表。Person类有一个部门ID,当我从数据库中加载它时,它通过实体框架的魔力将正确的部门对象关联起来 我的SQL语句是:C# EF使用SQL查询加载相关实体,c#,sql,sql-server,entity-framework,C#,Sql,Sql Server,Entity Framework,我有一个sql语句,希望返回一个具有相关部门实体的人员列表。Person类有一个部门ID,当我从数据库中加载它时,它通过实体框架的魔力将正确的部门对象关联起来 我的SQL语句是: SELECT * FROM PERSON INNER JOIN DEPARTMENT ON PERSON.DEPARTMENT_ID = DEPARTMENT.ID WHERE UPPER(FORENAME) LIKE '%RALPH%' ORDER BY SURNAME 在MSSMS中,当我运行查询时,我得
SELECT *
FROM PERSON
INNER JOIN DEPARTMENT ON PERSON.DEPARTMENT_ID = DEPARTMENT.ID
WHERE UPPER(FORENAME) LIKE '%RALPH%'
ORDER BY SURNAME
在MSSMS中,当我运行查询时,我得到以下结果:
但是,当我使用DbSet.SqlQuery()运行sql时,会得到以下结果:
请注意,department对象在第一个项目中为null,但在第二个项目中已填充
我知道我没有提供太多的信息,我希望能有一个简单的答案
顺便说一下
DataContext.Configuration.LazyLoadingEnabled = false;
LazyLoadingEnabled设置为false,如您所见,我知道将其更改为true将解决此问题。我宁愿不去为我喜欢的任何需要它的电话启用它
感谢各位如果您之前已将部门加载到该DbContext实例中,EF Change Tracking将识别出它已经拥有DepartmentId=2的部门,并将导航属性设置为该实例 为什么您使用的是
SqlQuery
,而不是正确的EF查询?我有一个对其执行筛选的人员列表。。使用用户提供的条件生成sql语句。搜索有很多潜在的变化,因此sql语句似乎是一种可行的方法。这几乎肯定不是一种可行的方法,否则使用EF没有任何意义。好的,我很感谢你的评论,我会考虑改变它!您是否愿意提供发生以下情况的原因?您以前是否已将部门加载到该DbContext实例中?如果是这样,EF将识别出它已经拥有DepartmentId=2的部门,并将导航属性设置为该实例。