Как я могу сопоставить таблицы с помощью свободного API в ASP.NET MVC 5, Entity Framework 6?

Я пытаюсь создать отношение один к одному, используя С# в Entity Framework 6, используя ASP.NET MVC 5 со встроенной проверкой подлинности пользователя.

Я могу создавать таблицы и соединения со значениями по умолчанию, которые создает Entity Framework. Но когда я пытаюсь использовать свободный API... точнее, когда я использую для создания модели даже пустую миграцию моей базы данных с помощью консоли диспетчера пакетов, произойдет сбой. Как я могу сопоставить свои отношения один к одному?

Моя ошибка:

//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.

Мой код:

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);
        }
    }
}

person Bob    schedule 18.10.2013    source источник
comment
ключ не определен Что вам непонятно? Как выглядит IdentityUser?   -  person Gert Arnold    schedule 19.10.2013


Ответы (2)


Ошибки возникают из-за того, что таблицы производных идентификаторов имеют сопоставление в производном контексте. Это нужно вызывать внутри новой функции переопределения OnModelCreating. Для этого просто добавьте base.OnModelCreating(modelBuilder) в свой метод, как показано ниже.

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

Похоже, вам не хватает вызова base.OnModelCreating в вашем DbContext.

person Hao Kung    schedule 19.10.2013