web-dev-qa-db-ja.com

エンティティタイプMVC5 EF6のユーザー

MVC5でクラスを作成しました。このクラスでは、コンテンツの主な所有者が必要です。次に、コンテンツのエディターをいくつか作成します。

public class Content
{
    public int ID { get; set; }
    public IdentityUser Owner { get; set; }
    public ICollection<IdentityUser> Editors { get; set; }
    public string Title{ get; set; }
    public string Body { get; set; }
}

データベースコンテキストには、次のコードがあります。

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

    modelBuilder.Entity<Content>()
        .HasOptional(c => c.Editors)
        .WithRequired()
        .WillCascadeOnDelete();

    modelBuilder.Entity<Content>()
        .HasRequired(c => c.Owner)
        .WithOptional()
        .WillCascadeOnDelete();
}

MicrosoftがIdentityUserオブジェクトを他のエンティティタイプで使用できるように実装することを期待するので、Contentエンティティのコントローラを作成しようとすると、おそらく何か間違ったことをしているでしょう。タイプすると、次のエラーが表示されます。

EntityType 'IdentityUserLogin' has no key defined
EntityType 'IdentityUserRole' has no key defined
EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no key defined
EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no key defined

また、この質問で説明されているように、ApplicationDbContextに次のコードを追加しようとしました asp.net MVC5 EF6のfluent apiを使用してテーブルをマップしますか?

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(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 });
}

私は何か間違ったことをしているに違いない。 Content EntityTypeでユーザーを処理する方法を教えてください。

49
Gunnar

次のメソッドOnModelCreatingは、作業コンテキストを作成します。しかし、それがあなたが望むマッピングであるかどうかはわかりません。

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

    modelBuilder.Entity<Content>()
        .HasMany(c => c.Editors)
        .WithOptional()
        .WillCascadeOnDelete(false);

    modelBuilder.Entity<Content>()
        .HasRequired(c => c.Owner)
        .WithOptional()
        .WillCascadeOnDelete(false);

    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 });
}
61
Olav Nybø

私は同じ問題を抱えていて、私は電話していないことがわかりました

 base.OnModelCreating(modelBuilder);

私のDbModelで

104
Aaron