11

私は、組み込みのユーザー認証でASP.NET MVC 5を使用してEntity Framework 6でC#を使用して一対一の関係を作成しようとしています。Fluent APIを使用してテーブルをASP.NET MVC 5、Entity Framework 6でどのようにマップできますか?

私は、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); 
     } 
    } 
} 
+0

_hasキーが定義されていません。あなたには何が分かりませんか? 'IdentityUser'はどのように見えますか? –

答えて

18

派生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()); 
} 
+1

これにより解決策がわかりやすくなりました。ありがとう! –

7

あなたはDbContextにbase.OnModelCreatingへの呼び出しが欠落しているように見えます。

関連する問題