57

IdentityContext を mydbcontext と統合したいのですが、このエラーが発生しています

モデルの生成中に 1 つ以上の検証エラーが検出されました:

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
{

}
4

3 に答える 3

152

コードにはこれが表示されませんが、取得しているエラーから、OnModelCreating.This をオーバーライドしていると思われます。ここでIdentityDbContext<ApplicationUser>エンティティ フレームワーク マッピングを構成します。つまり、OnModelCreating をオーバーライドする場合は、ベースを呼び出すか、自分でマッピングを行う必要があります。

したがって、次のいずれかです。

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

    // your stuff here
}

または、マッピングを行います。

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 });
}
于 2013-11-15T07:45:26.433 に答える
6

base.OnModelCreating を呼び出さずに独自のマッピングを行いたい場合、マッピングは次のようになります。

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

IdentityUserLogin のキーを UserId のみに配置すると、デフォルトの Google ログインを使用すると DbEntityValidationExceptions が発生します。

于 2014-01-25T17:16:59.310 に答える