Editar: Se ha actualizado la descripción del problema sobre la base de las pruebas - 12 de septiembre de 2011.EF4.1 entidad anidada múltiple Incluye gets NotSupportedException?
tengo esta consulta que lanza una NotSupportedException siempre que llame .ToList() ("No se admite el método especificado.").
IQueryable<FileDefinition> query = db
.FileDefinitions
.Include(x => x.DefinitionChangeLogs)
.Include(x => x.FieldDefinitions.Select(y => y.DefinitionChangeLogs)) // bad
.Include(x => x.FieldDefinitions.Select(y => y.FieldValidationTables)) // bad
.Where(x => x.IsActive);
List<FileDefinition> retval = query.ToList();
Si comento alguna de las líneas que he comentado como "malas", entonces la consulta funciona. También intenté incluir diferentes entidades anidadas en mi modelo de objetos con el mismo efecto. Incluir 2 provocará un bloqueo. Por anidado, me refiero a una propiedad de navegación de una propiedad de navegación. También intenté usar los métodos .Include con una ruta de cadena: el mismo resultado.
Mi estructura de la tabla es el siguiente:
esto es usar MySQL 5.1 (tablas InnoDB obviamente) como el almacén de base de datos con MySQL Connector/NET 6.3.4.
Así que mi pregunta es: ¿Por qué esto no funciona?
Nota: Puedo hacer que funcione si carga explícitamente las entidades relacionadas como en this link. Pero quiero saber por qué EF odia mi modelo de datos.
RESPUESTA: MySQL Connector aparentemente no es capaz de manejar la segunda entidad anidada incluida. Lanza la NotSupportedException, no .NET EF. Este mismo error también estaba presente cuando probé esto usando EF4.0, pero mi investigación en ese momento me llevó a creer que se trataba de entidades de auto-seguimiento que causaban el problema. Traté de actualizar a la última Connector, pero comenzó a causar un Out of Sync error. Esto es yet another reason para que odie a MySQL.
¿Qué sucede si * solo * deja el 'Incluir 'allí que ha marcado como" malo "y elimina los otros dos? Incluye? ¿Funciona entonces? – Slauma
@Slauma Sí, la 2da línea funciona sola. Hice más pruebas, y parece ser la combinación de 2da y 3ra incluye lo que causa el colapso. Trabajan solos, pero no juntos. La colección FieldValidationTables se carga desde una vista en la base de datos, y tuve que configurar manualmente la relación en el modelo EF. Tiene los campos FieldDefinitionId y TableName. FieldDefintion 1 <-> * FieldValidationTable –
No tengo idea de qué es este problema. Probablemente necesite agregar más detalles a su pregunta para obtener una respuesta (básicamente, para que el problema sea reproducible para otras personas en un modelo de ejemplo simple). – Slauma