entity framework - when using code first, accessing association does not account for .Take(x) -
entity framework - when using code first, accessing association does not account for .Take(x) -
2 entities: member , comment member has icollection<comment> comments
whenever utilize member.comments.take(x) ef produces query gets comments database. supposed that? because property icollection? there way tell ef factor in take(x) or should refactor code utilize context.comments.where(c=>c.memberid==member.id).take(x) , live it?
the proxy classes generated ef provide lazy-loading navigation properties, not evaluate queries. 1 time accessed member.comments property, comment-entities loaded database , query applied in memory. avoid this, must comments in query straight executed on object-set (like illustration you've gave).
i believe design, since have homecoming iqueryable navigation property in order ef intercept access property, suppose isn't covered aswell.
you've described way handle this, although isn't pretty. alternative somehow tell ef partially load property when create original query member-object. that, can think of 1 or 2 thinks might go wrong approach.
edit after research , trial , error couldn't come approach, executed straight on dbset<member> rather dbset<comment> , returns member object. possible using anonymous object:
var query = m in catalog.members select new { id = m.id, name = m.name, comments = m.comments.take(1) }; which translated member-object in memory, of course of study wouldn't connected context in anyway (=no alter tracking). in sample query above cannot create instance of fellow member instead of anonymous type, because ef can create non-complex types (i'm guessing because context knows "member" entity).
entity-framework linq-to-entities entity-framework-4.1 ef-code-first
Comments
Post a Comment