If I run a LINQ query like this:
ListI find that all of the entities accessed by the query are eager loaded... sort of. I can access l1.First().TrackedEntity.First().Name, for example. But l1.First().TrackedEntity.IsLoaded is false! So the data exists in the context, but the context doesn't think it's loaded. Furthermore, adding an Include("TrackedEntity") doesn't do a thing when you do joins. So even though all the information gets pulled into memory correctly, if I put any "if(!isloaded) load" code in my front-end (which would normally be a robust way of doing things), it will reload all the same data from the database for each EntityCategory.l1 =
from u in context.UserSet
where u.UserId == user.UserId
from t in u.UserEntities
orderby t.EntityCategory.Name
select t.EntityCategory
Now, I could do a fancy query like this:
from ec in context.EntityCategory.Include("TrackedEntity")But the eager-loaded results would give me ALL of the tracked entities for each entity category, and not just the ones selected by the given user.
where ec.TrackedEntity.Any(te => te.User.Any(u => u.UserId == user.UserId))
select ec
Is there any way make a statement that selectively joins tables AND eager-loads ONLY the entities included in the join, marking the appropriate EntityCollection as Loaded?
No comments:
Post a Comment