C# EF使用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中,当我运行查询时,我得

我有一个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中,当我运行查询时,我得到以下结果:

但是,当我使用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的部门,并将导航属性设置为该实例。