2013-11-15 22 views
57

私はmydbcontextでIdentityContextを統合したいが、私はAsp.netアイデンティティの検証エラー

つまたは複数の検証エラーがモデルの生成中に検出されました。このエラー取っています:

Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserLoginを: :EntityType 'IdentityUserLogin'にはキーが定義されていません。このEntityTypeのキーを定義します。 Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserRole :: EntityType 'IdentityUserRole'にはキーが定義されていません。このEntityTypeのキーを定義します。 IdentityUserLogins:EntityType:EntitySet 'IdentityUserLogins'は、キーが定義されていない 'IdentityUserLogin'タイプに基づいています。 IdentityUserRoles:EntityType:EntitySet 'IdentityUserRoles'は、キーが定義されていない 'IdentityUserRole'タイプに基づいています。

どうすればこの問題を解決できますか?

コード:

public partial class ivdbDb156978Context : IdentityDbContext<ApplicationUser> 
{ 
    static ivdbDb156978Context() 
    { 
     Database.SetInitializer<ivdbDb156978Context>(null); 
    } 

    public ivdbDb156978Context() 
     : base("Name=ivdbContext") 
    { 
    } 


    public DbSet<Car> Cars { get; set; } 

アプリケーションユーザ

public class ApplicationUser : IdentityUser 
{ 

} 

答えて

152

あなたのコードはこれを示すdoes'tが、エラーからあなたは私はあなたがOnModelCreating.ThisをオーバーライドすることはIdentityDbContext<ApplicationUser>のconfigureであることを前提としてきていますエンティティフレームワークのマッピングこれは、OnModelCreatingをオーバーライドする場合、ベースを呼び出す必要があるか、自分でマッピングを行う必要があることを意味します。

だから、このいずれか:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    // your stuff here 
} 

それとも、マッピングを行います。あなたはbase.OnModelCreatingを呼び出して独自のマッピングをしたいしたくない場合は、あなたのマッピングがすべき

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId); 
    modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id); 
    modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); 
} 
+0

を持つことができないということです私がそれを必要とするたびに、StackOverFlowでコードの最初のアプローチ。ありがとう –

+0

OnModelCreatingでオーバーライドを作成したので、modelBuilder.Conventions.Remove ()を追加できました。 EFがテーブル名を複数形にするのを防ぐために、マイグレーションを追加しようとする最初の試みで私はこの問題を解決します。あなたの非常に有益な答えをありがとうOlav – GDB

+0

こんにちはOlav、これは私のキーが定義されていないエラーを解決しましたが、今では多数の無効な列名エラーが発生します。私はここに投稿しましたhttp://stackoverflow.com/questions/23346422/identity-2-usermanager-find-throws-invalid-object-name-dbo-applicationuser-e。あなたはこれについてどんな洞察もありますか?ありがとう、ジョー – Joe

6

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id).Property(p => p.Name).IsRequired(); 
    modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); 
    modelBuilder.Entity<IdentityUserLogin>().HasKey(u => new {u.UserId, u.LoginProvider, u.ProviderKey}); 
} 

IdentityIserLoginのキーをUserIdにだけ入れると、DbEntityVaデフォルトのGoogleログインを使用している場合は、lidationの例外があります。

3

奪うあなたは私はEFについてのあなたの正しい答えを見つけることができると確信している空のOnModelCreating

グッド

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
    // your stuff here 
} 

悪い

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    // base.OnModelCreating(modelBuilder); 
    // your stuff here 
}