Domanda

Ho un progetto C # che utilizza il metodo EF CodeFirst. Il mio problema è come EF sta interpretando le mie classi e generare le tabelle del database. EF è inferire troppe cose e il mio db risultante non è il modo in cui mi piacerebbe. In particolare, si sta generando colonne id supplementari in una delle mie classi di mappatura.

Ecco le mie classi 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;}
}

Le mie lezioni di mappatura sono tipici, ma qui è la classe 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)
}
}

Tutti i miei test di unità funzionare come previsto. Tuttavia, la tabella EntityAttribute viene reso con DonorId e GrantId colonne. Non voglio questo come Io in realtà sono decine di altre "EntityTypes" che verranno utilizzati per questo scenario. Questo è il motivo per cui ho scelto la classe EntityTypeEnum.

Che cosa sto facendo di sbagliato? O c'è un altro modo dovrei mappa questo modo EF gestisce le cose come voglio. Grazie.

È stato utile?

Soluzione

Il doesn EF 'enumerazioni di supporto t affatto, come del V4 CTP 5. potrebbero essere inclusi nella prossima release.

Detto questo, l'aspetto dello schema (a me, non è chiaro dal tuo post, e le vostre intenzioni possono essere diverse) troppo vicino ad un EAV per il mio conforto. Per i soliti motivi (Google) non mi piace questi, e non vorrei che questo tipo di modello, anche con il supporto enum nel EF.

Perché non la mappa ad un altro tipo di entità, invece di un enum?

Se si chiede una domanda in forma di "Ecco le mie esigenze di lavoro, qual è il miglior schema per questo?" è possibile ottenere una risposta migliore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top