EntityFramework 6 RC1 Se incluyen errores en la propiedad Many-to-Many

c# entity-framework entity-framework-6

Pregunta

Tengo una relación de muchos a muchos entre los Agentes y los Grupos de Agentes (psuedocode, abreviado).

public class Agent { 
    public virtual List<AgentGroup> AgentGroups { get; set; } 
}

public class AgentGroup { 
    public virtual List<Agent> Agents { get; set; } 
}

En algún punto del código, quiero obtener todos los Grupos de Agentes, y quiero obtener / incluir previamente los Agentes para cada grupo. También quiero rellenar previamente la colección AgentGroups en los Agentes. Esto funcionaba en EF 6 beta, pero ya no funciona en EF 6 rc1:

public class Agent { 
    public virtual List<AgentGroup> AgentGroups { get; set; } 
}

public class AgentGroup { 
    public virtual List<Agent> Agents { get; set; } 
}

El mensaje de error que recibo es

Nombre de objeto no válido 'dbo.AgentAgentGroups'.

Y, de hecho, no hay una tabla AgentAgentGroups , la tabla es dbo.AgentGroupAgents . ¿Alguna idea sobre cómo hacer que esto vuelva a funcionar?

Actualmente no tengo anotaciones y no estoy usando la API fluida, es estrictamente el código predeterminado, primero las convenciones.

Respuesta aceptada

En rc1 parece haber un cambio en la convención de nomenclatura de la tabla de unión en asociaciones de muchos a muchos. Cuando pruebo su modelo en varias versiones EF, esto es lo que veo:

  • EF5 (estable): AgentGroupAgents
  • EF6 (beta): AgentGroupAgents
  • EF6 (rc1): AgentAgentGroups

No sería malo si la versión beta fuera diferente, pero rc1 difiere de la última versión RTM, lo que hace que este sea un cambio importante. ¡Buena atrapada!

Editar

Respuesta del equipo de EF :

Hola,
Antes de EF6, había algunas áreas de creación de modelos que no eran deterministas: dependiendo de si estaba ejecutando en x86 o x64, podría obtener un modelo diferente. El nombre de la tabla de muchos a muchos fue una de estas áreas. En EF6 abordamos esto para garantizar que los resultados siempre fueran los mismos. Desafortunadamente, eso significa que para algunos modelos (dependiendo de la arquitectura en la que se estaban ejecutando) la actualización a EF6 puede causar un cambio de modelo. Pero el modelo que ahora se calcula será consistente en todas las máquinas y futuras versiones de EF. Si desea continuar usando el nombre original, la mejor opción es usar la API Fluent para especificar el nombre de la tabla de unión .
~ Rowan




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué