Entity Framework Include() is not working
Add "System.Data.Entity" and you will be able to call Include on IQueryable:
var questions = from q in db.Questions
from sq in db.SurveyQuestions
where sq.Survey == surveyTypeID
orderby sq.Order
select q;
questions = questions.Include("QuestionType");
see : How can i convert a DBQuery<T> to an ObjectQuery<T>?
I ran into this issue of Include(e => e.NavigationProperty)
not working, but the solution was different than above.
The problematic code was as follows:
UserTopic existingUserTopic = _context.UserTopics
.Include(ut => ut.Topic)
.FirstOrDefault(t => t.UserId == currentUserId && t.TopicId == topicId);
if (existingUserTopic != null)
{
var entry = _context.Entry(existingUserTopic);
entry.State = EntityState.Deleted;
if (existingUserTopic.Topic.UserCreated)
{
var topicEntry = _context.Entry(existingUserTopic.Topic);
entry.State = EntityState.Deleted;
}
await _context.SaveChangesAsync();
}
So the problem was the order of the code. Entity Framework appears to nullify navigation properties in memory as soon as an entity is marked as EntityState.Deleted
. So to access existingUserTopic.Topic
in my code, I have to do it before marking existingUserTopic
deleted.
The problem might be related to the subquery in your Linq expression. Subselects, grouping und projections can cause eager loading with Include
to fail silently, as mentioned here and explained in more detail here (see answers of Diego Vega somewhere in the middle of the thread).
Although I cannot really see that you violate any of the rules to follow when using Include
as described in those posts, you could try to change the query according to the recommendation:
var questions = from q in db.Questions
from sq in db.SurveyQuestions
where sq.Survey == surveyTypeID
orderby sq.Order
select q;
var questionsWithInclude = ((ObjectQuery)questions).Include("QuestionType");
foreach( var question in questionsWithInclude ) {
Console.WriteLine("Question Type: " + question.QuestionType.Description);
}
(Or use the extension method mentioned in the posts.)
If I understand the linked posts correctly, this does not necessarily mean that it will work now (probably not), but you will get an exception giving you more details about the problem.