Fluent APIを使用してASP.NET MVC 5、Entity Framework 6でテーブルをマップするにはどうすればよいですか?

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

質問

私はエンティティフレームワーク6でC#を使用して1対1の関係を作成しようとしていますが、組み込みのユーザー認証を使用してASP.NET MVC 5を使用しています。

Entity Frameworkが作成する既定のテーブルと接続を作成できます。しかし、私は流暢なAPIを使用しようとすると....より具体的に私がモデルを使用して空の場合でも、私のデータベースの移行は、パッケージマネージャーコンソールを使用して失敗します。 1対1の関係をどのようにマップできますか?

私のエラー:

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

受け入れられた回答

このエラーは、派生したIDテーブルが派生コンテキストにマッピングされているために発生します。これは、新しい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());
}

人気のある回答

base.OnModelCreatingbase.OnModelCreating呼び出しが不足しているようです。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ