Linq-To-Entities Include

偶尔善良 提交于 2019-12-06 08:03:03

问题


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!


回答1:


  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


来源:https://stackoverflow.com/questions/1618016/linq-to-entities-include

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!