El tipo 'Company.Model.User' y el tipo 'Company.Core.Model.User' tienen el mismo nombre simple de 'Usuario' y, por lo tanto, no se pueden usar en el mismo modelo

ef-code-first entity entity-framework entity-framework-6 inheritance

Pregunta

Tengo una clase de entidad base MyCompany.Core.Model.User que se utilizará para las propiedades comunes de una entidad de User :

public class User
{
    public string Username { get; set; }
    public string Usercode { get; set; }
}

También tengo una clase de asignación base MyCompany.Core.Model.UserMap para configurar las asignaciones del código primero para la clase de User base:

public class User
{
    public string Username { get; set; }
    public string Usercode { get; set; }
}

En un conjunto separado, tengo una clase derivada MyCompany.Model.User que hereda de la clase de User base y la extiende con algunas propiedades adicionales:

public class User
{
    public string Username { get; set; }
    public string Usercode { get; set; }
}

Además, tengo una clase de asignación derivada MyCompany.Model.UserMap para proporcionar la configuración adicional para las propiedades adicionales:

public class User
{
    public string Username { get; set; }
    public string Usercode { get; set; }
}

Sin embargo, al agregar MyCompany.Model.User al contexto y registrar MyCompany.Model.UserMap , MyCompany.Model.UserMap el siguiente error:

El tipo 'MyCompany.Model.User' y el tipo 'MyCompany.Core.Model.User' tienen el mismo nombre simple de 'Usuario' y, por lo tanto, no se pueden usar en el mismo modelo. Todos los tipos en un modelo dado deben tener nombres simples únicos. Use 'NotMappedAttribute' o llame a Ignore en la API fluida de Code First para excluir explícitamente una propiedad o tipo del modelo.

Este enlace indica que no puede tener el mismo "nombre simple" dos veces en el modelo.

¿Por qué la clase base "nombre simple" se está registrando en el modelo, y hay una forma de evitarlo para implementar este tipo de herencia de entidad?

Sospecho que la solución simple sería cambiar el nombre de la clase derivada; sin embargo, preferiría evitar esto, ya que puede haber muchas derivaciones en múltiples contextos.

Nota: Uso de Entity Framework 6.0.0-rc1 (versión preliminar)

Respuesta aceptada

Esta es una limitación de EF que informé en 2012 https://entityframework.codeplex.com/workitem/483 que aún no está implementado en 6.0.2. EF utiliza una arquitectura interna plana y no reconoce los espacios de nombres. Podría venir en EF7 pero no antes. Por ahora, la única solución es cambiar el nombre de las dos clases a nombres de clase únicos, independientemente del espacio de nombres en el que se encuentren. En mi humilde opinión, esta es una limitación importante dentro de EF. Simplemente considere una clase llamada Categoría y cuántos espacios de nombres diferentes podría usarse dentro de un dominio.


Respuesta popular

Primero leer las asignaciones de tipo de tabla

Las opciones del modelo de implementación jerárquica deben entenderse primero. Luego mira la opción IGNORE. Puede o no puede necesitar dependiendo del enfoque elegido.
requiere ignorar ???

modelBuilder.Ignore<BaseXYZ>()

Ef está intentando incluir su clase base para admitir un tipo incluido que hereda de una clase abstracta NO.




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é