2017-08-08 154 views
0

我有一個existing application,我正在重寫爲帶有ReactJS前端的.NET Core API。我仍然在API的最後,我遇到了一個問題。.Net核心API與EF核心代碼第一和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之間的一對多關係。一位用戶可以提交許多藝術家和歌詞......等等。簡單的東西真的。

問題

應用程序建立很好,但是當我試圖通過打需要訪問數據庫中的一個控制器來運行它,我得到以下錯誤:

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不應用身份相關模式。

UPDATE: 一切工作正常,我因爲你可以看到下面的截圖: enter image description here

我還有一個想法,爲什麼你能有這樣的錯誤。您的BbContext繼承了DbContext類還是IdentityDbContext<IdentityUser>?因爲如果我使用通常的DbContext類,我得到了與截圖相同的錯誤。

爲了使Idenity表正常工作,您應該使用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

我只是說幹就幹,[試過你的建議(https://www.screencast.com/t/xnwgQlAt4)裝飾。可悲的是我得到了同樣的錯誤。 – Ciwan

+0

@Ciwan奇怪,你能展示LINQ查詢哪些產生這樣的錯誤? – user2771704

+0

我沒有這樣的LINQ查詢。我只是想測試以確保我的Db被創建,所以我創建了一個[DummyController](https://gist.github.com/Ciwan1859/e9a2d6ddcee0c2145a2b3e434c4021af),通過構造函數在我的上下文中傳遞。這應該強制EF Core創建我的數據庫,正如您所看到的那樣,該錯誤阻礙了這一點。 – Ciwan

0

請不要嘗試宣告命名Id一個GUID屬性,用get和set的IdentityUserLogin實體整個代碼。

另一種選擇是申報財產,並與[Key]屬性

+0

嗯我認爲'IdentityUser'已經有了嗎? – Ciwan

+0

我在這回轉也... – Leonardo