У меня проблема с запросом linq, когда я не использую явно свойство include для свойства навигации.linq entity framework содержит странное поведение
---Task entity model ----
...
public Project Project { get; set; }
public TaskType TaskType { get; set; }
...
var tasks = db.Tasks
.Where(t => (t.Project.ProjectId == project.ProjectId))
foreach (Task t in tasks)
{
// for some items t.TaskType is null
// I have noticed that when t.TaskType.Id
// is different to the first one in the loop then only the next different
// tasktype is null
}
// however when using
var tasks = db.Tasks.Include(t=>t.TaskType)
.Where(t => (t.Project.ProjectId == project.ProjectId))
// tasktype is always there (where as without the include in some tasks it does not extract the tasktype)
Использование .Include исправил мою проблему, но мне нравится понимать, почему она ведет себя так.
Будет ли он охотно загружать навигационные свойства только для некоторых предметов, а не для других? Я прохожу через цикл foreach, как указано выше, и некоторые задачи не включают в себя типы задач. Я ожидал бы, что поведение нетерпеливой нагрузки будет последовательным. – wfquestions
@wfquestions Перед 'var tasks = db.Tasks.Where (t => (t.Project.ProjectId == project.ProjectId))' запрос, как вы используете экземпляр 'db'' DbContext'? Возможно, вы добавляете некоторые «Задачи» в этот экземпляр «DbContext»? –