Pregunta

Tengo un proyecto de C # que utiliza el enfoque de EF CodeFirst. Mi problema es cómo EF está interpretando mis clases y la generación de las tablas de la base. EF está dando a entender muchas cosas y mi db resultante no es la manera que me gustaría. En concreto, se está generando columnas ID adicional en una de mis clases de mapeo.

Aquí están mis clases POCO:

    public partial class Attribute
    {
    public int Id {get;set;}
    public string Name {get;set;}
    public virtual ICollection<EntityAttribute> EntityAttributes {get;set;}
    }

    public partial class Grant
    {
    public int Id {get;set;}
    public string Name {get;set;}
    public virtual ICollection<EntityAttribute> EntityAttributes {get;set;}
    }

    public partial class Donor
    {
    public int Id {get;set;}
    public string Name {get;set;}
    public virtual ICollection<EntityAttribute> EntityAttributes {get;set;}
    }

    public enum EntityTypeEnum
    {
    Grant = 1,
    Donor = 2
    }

    public partial class EntityAttribute
    {
    public int Id {get;set;}
    public int EntityId {get;set;}
    public int AttributeId {get;set;}
    public int EntityTypeId {get;set;}
    public EntityTypeEnum EntityType
    {
       get{return (EntityTypeEnum)this.EntityTypeId;}
       set{this.EntityTypeId = (int)value;}
    }
    public virtual Grant Grant {get;set;}
    public virtual Donor Donor {get;set;}
}

Mis clases de mapeo son típicos, pero aquí es la clase EntityAttributeMap:

public partial class EntityAttributeMap : EntityTypeConfiguration<EntityAttribute>
{
public EntityAttributeMap()
{
this.ToTable("EntityAttribute");
this.HasKey(ea => ea.Id);
this.Property(ea => ea.EntityTypeId).IsRequired();
this.Ignore(ea => ea.EntityType);

this.HasRequired(ea => ea.Grant)
    .WithMany(g => g.EntityAttributes)
    .HasForeignKey(ea => ea.EntityId);

this.HasRequired(ea => ea.Donor)
    .WithMany(d => d.EntityAttributes)
    .HasForeignKey(ea => ea.EntityId);

this.HasRequired(ea => ea.Attribute)
    .WithMany(a => a.EntityAttributes)
    .HasForeignKey(ea => ea.AttributeId)
}
}

Todas mis pruebas unitarias funcionar como se espera. Sin embargo, la tabla EntityAttribute se representa con columnas DonorId y grantid. No quiero esto, ya que en realidad tienen docenas de otras "EntityTypes" que se utilizarán para este escenario. Es por eso que elegí la clase EntityTypeEnum.

¿Qué estoy haciendo mal? O hay otra manera de que éstos necesario trazar un mapa de modo EF maneja las cosas de la manera que quiero. Gracias.

¿Fue útil?

Solución

El doesn EF 't enumeraciones de apoyo en absoluto, ya V4 de CTP 5. pueden ser incluidos en la próxima versión.

Una vez dicho esto, las miradas de esquema (para mí, no está claro de su cargo, y sus intenciones puede ser diferente) demasiado cerca de un EAV para mi comodidad. Por las razones habituales (Google él) No me gusta esto, y no me gustaría ese tipo de modelo incluso con el apoyo enum en el EF.

¿Por qué se asigna a otro tipo de entidad en lugar de una enumeración?

Si usted hace una pregunta en forma de "Aquí están mis necesidades de negocio, ¿cuál es el mejor esquema para esto?" usted puede obtener una mejor respuesta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top