Question

I'm currently learning a bit more about Linq-To-Entities - particularly at the moment about eager and lazy loading.

proxy.User.Include("Role").First(u => u.UserId == userId)

This is supposed to load the User, along with any roles that user has. I have a problem, but I also have a question. It's just a simple model created to learn about L2E

I was under the impression that this was designed to make things strongly type - so why do I have to write "Role"? It seems that if I changed the name of the table, then this wouldn't create a compilation error...

My error is this:

The specified type member 'Roles' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

The solution below allows me to now write the code:

proxy.User.Include(u => u.Role).First(u => u.UserId == userId)

Which is MUCH nicer!

Was it helpful?

Solution

  1. Include is a hint to eager load, it does not force eager loading.
  2. Always check the IsLoaded property before referencing something that you hope was eager loaded by Include.
  3. There are ways to put a strongly typed object in the include statement, but there is no solution available to this issue out of the box with Entity Framework. Google something like: Entity Framework ObjectQueryExtension Include
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top