2017-08-08 17 views
0

ReactJSフロントエンドを使用して.NET Core APIとして書き直しているexisting applicationがあります。私はまだAPIの終わりですが、私は問題に遭遇しました。.Net Core APIとEF Core Code FirstとIdentityUser

CODE

私は次のコードでBbUser.csエンティティクラスを持っている:

public class BbUser : IdentityUser 
{ 
    public int Points { get; set; } = 0; 
    public string DisplayUsername { get; set; } 
} 

そして、私はまたArtist.csエンティティクラスを持っている:

public class Artist 
{ 
    public int Id { get; set; } 
    [Required] 
    [MaxLength(50)] 
    public string FirstName { get; set; } 
    [MaxLength(50)] 
    public string LastName { get; set; } 
    [MaxLength(100)] 
    public string UrlFriendly { get; set; } 
    public string ImageUrl { get; set; } 
    public bool IsVerified { get; set; } 
    public DateTime CreatedOn { get; set; } 
    public DateTime ModifiedOn { get; set; } 
    public ICollection<Lyric> Lyrics { get; set; } = new List<Lyric>(); 
    public string UserId { get; set; } 
    public BbUser User { get; set; } 
} 

私はワンを必要としますBbUserArtistの間に多対多の関係があります。 1人のユーザーが多くのアーティストと歌詞を提出することができます。本当に簡単なもの。

PROBLEM

アプリケーションは罰金のビルドが、私は、データベースへのアクセスを必要とするコントローラを押すことでそれを実行しようとすると、私は次のエラーを取得する:

The entity type 'IdentityUserLogin' requires a primary key to be defined.

私はこれを持っていました通常のEFコードファースト(コアではない)とthe fix for thatの問題はここでは機能しません。

答えて

1

このモデルは、(コンパイルされ、実行時には例外)私のために働いていない私はDbContextクラスに次のコードを使用している場合:

protected override void OnModelCreating(ModelBuilder builder) 
    { 
     builder.Entity<BbUser>(b => b.ToTable("AspNetUsers")); 
     base.OnModelCreating(builder); 
    } 

base.OnModelCreating(builder)を呼び出すことなく、私はので、この場合のコンテキストISNで、同じエラーが出ますID関連スキーマを適用していません。

UPDATE:私はあなたがこのようなエラーを持つことができる理由もう一つのアイデアを持っている enter image description here

:あなたは下のスクリーンショットから見ることができるように すべては私のために正常に動作します。 BbContextはDbContextクラスまたはIdentityDbContext<IdentityUser>クラスから継承しましたか?通常のDbContextクラスを使用した場合、スクリーンショットにあったのと同じエラーが発生したためです。

Iderityテーブルを正常に動作させるには、IdentityDbContext<IdentityUser>を使用する必要があります。私の作業DbContextクラスのコード全体

public class BbContext :IdentityDbContext<IdentityUser> 
    { 
     public BbContext(DbContextOptions options):base(options) 
     { 
      Database.EnsureCreated(); 
     } 

     public DbSet<Artist> Artists { get; set; } 
     public DbSet<Lyric> Lyrics { get; set; } 
     public DbSet<Heart> Hearts { get; set; } 

     protected override void OnModelCreating(ModelBuilder builder) 
     { 
      builder.Entity<BbUser>(b => b.ToTable("AspNetUsers")); 
      builder.Entity<Heart>().HasKey(h => new {h.UserId, h.LyricId}); 
      base.OnModelCreating(builder); 
     } 
    } 
+0

とそれを飾ることです。悲しいことに私は同じエラーを受けます。 – Ciwan

+0

@Ciwan Strange、このようなエラーを生成するLINQクエリを表示できますか? – user2771704

+0

私はそのようなLINQクエリを持っていません。私はちょうど私のDbが作成されることを確認するためにテストしたいので、私は[DummyController](https://gist.github.com/Ciwan1859/e9a2d6ddcee0c2145a2b3e434c4021af)をコンストラクタを介して自分のコンテキストに渡して作成しました。これはEFコアに自分のデータベースを強制的に作成させるはずです。また、わかるように、そのエラーが発生します。 – Ciwan

0

の下に取得し、IdentityUserLoginエンティティに設定し、両方で、Idという名前のGuidプロパティを宣言してみてくださいください。

別のオプションは、私は先に行って、(https://www.screencast.com/t/xnwgQlAt4)[あなたが示唆したものを試してみました]プロパティを宣言し、[Key]属性

+0

ええ、私は 'IdentityUser'はすでにそれを持っていたと思った? – Ciwan

+0

私もこれを巡って回っています... – Leonardo

関連する問題