Come posso mappare le tabelle usando l'API fluente in ASP.NET MVC 5, Entity Framework 6?

asp.net-identity asp.net-mvc-5 c# entity-framework entity-framework-6

Domanda

Sto cercando di creare una relazione uno a uno utilizzando C # in Entity Framework 6 utilizzando ASP.NET MVC 5 con autenticazione utente integrata.

Sono in grado di creare tabelle e connessioni con i valori predefiniti creati da Entity Framework. Ma quando provo a usare l'API fluente .... più specificamente quando uso sul modello per creare anche vuoto, la migrazione del mio database usando la console del gestore pacchetti fallirà. Come posso mappare la mia relazione uno a uno?

Errore mio:

//error
//my.Models.IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key defined.   //Define the key for this EntityType.
//my.Models.IdentityUserRole: : EntityType 'IdentityUserRole' has no key defined. //Define the key for this EntityType.
//IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' is based on type    //'IdentityUserLogin' that has no keys defined.
//IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' is based on type //'IdentityUserRole' that has no keys defined.

Il mio codice:

namespace my.Models
{

    public class ApplicationUser : IdentityUser
    {
    }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection")
        {
        }

        public DbSet<EngineeringProject> EngineeringProjects { get; set; }

        public DbSet<EngineeringProject> EngineeringDesigns { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new EngineeringDesignMap());
            modelBuilder.Configurations.Add(new EngineeringProjectMap());
        }

    }
}

namespace my.Models.Mapping
{
    public class EngineeringProjectMap : EntityTypeConfiguration<EngineeringProject>
    {
        public EngineeringProjectMap()
        {
            this.HasRequired(t => t.EngineeringPd)
                .WithOptional(t => t.EngineeringProject);
            this.HasRequired(t => t.EngineeringProjectCategory)
                .WithMany(t => t.EngineeringProjects)
                .HasForeignKey(d => d.CategoryId);
        }
    }
}

Risposta accettata

Gli errori si verificano perché le tabelle di identità derivate dispongono di mapping nel contesto derivato. Questo deve essere chiamato all'interno della nuova funzione OnModelCreating Override. Per fare ciò basta aggiungere base.OnModelCreating (modelBuilder) al tuo metodo come mostrato di seguito.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{   
    base.OnModelCreating(modelBuilder); // <-- This is the important part!
    modelBuilder.Configurations.Add(new EngineeringDesignMap());
    modelBuilder.Configurations.Add(new EngineeringProjectMap());
}

Risposta popolare

Sembra che manchi una chiamata a base.OnModelCreating nel tuo DbContext.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché