0

我試圖運行以下命令爲我自己創建的上下文創建新的遷移。我運行這個命令。在MVC Core應用程序中運行遷移時出錯

dotnet ef migrations add MusicContextCreation --context MusicContext 

這是我的音樂上下文課。這正是我想爲其添加遷移的原因。

using Microsoft.EntityFrameworkCore; 

namespace MusicianProject.Models.Contexts 
{ 
    public class MusicContext : DbContext 
    { 
     public MusicContext(DbContextOptions<MusicContext> options) : base(options) 
     { 

     } 

     protected override void OnModelCreating(ModelBuilder builder) 
     { 
      base.OnModelCreating(builder); 

      //builder.Entity<Band>().HasMany<BandMember>(); 
      //builder.Entity<Band>().HasMany<Album>(band => band.Albums); 
      builder.Entity<Band>().ToTable("Band"); 
      //builder.Entity<BandMember>().HasOne<User>(bandmember => bandmember.User); 
      builder.Entity<BandMember>().ToTable("BandMember"); 
      builder.Entity<Album>().ToTable("Album"); 
      builder.Entity<Genre>().ToTable("Genre"); 
     } 

     public DbSet<Band> Bands { get; set; } 
     public DbSet<Genre> Genres { get; set; } 
     public DbSet<BandMember> BandMembers { get; set; } 
     public DbSet<Album> Albums { get; set; } 

    } 
} 

這是我在命令提示符下運行該命令時遇到的錯誤消息。

實體類型Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin需要定義主鍵。

我不明白的是我調用了基類OnModelCreating,我在其他類似的問題中已經看到了它的答案。我不明白的是,另一個我用於身份用戶的環境,不會給我這個問題,它實際上會設置身份表。

如果需要,我可以添加在這個上下文中使用的類,我沒有添加它們,因爲我不想混亂。如果需要查看在dbset集合中定義的類,請在評論中告訴我。

回答

1

您應該從IdentityDbContext(而不是DbContext)繼承,它具有正確的OnModelCreating內容並具有流暢的Identity類別配置。

如果你想有兩個不同的DbContexts,一個用於用戶和其他其他類 - 你不應該在不同的上下文中類之間的任何引用,閱讀my answer here

+0

我改變了類從IdentityDbContext,我仍然繼承得到相同的錯誤。你是否建議我將DbSets移至我的IdentityDbContext?我不明白爲什麼他們必須分開。 – ddeamaral

+0

你的意思是「我的IdentityDbContext」?您應該從'Microsoft.AspNetCore.Identity.EntityFramework'命名空間中的一個繼承,請參閱[這裏](https://docs.microsoft.com/en-us/aspnet/core/migration/identity#configure-identity-and-會員) – Dmitry

+0

對不起,我的意思是我的「UserContext」類。我改變了我的MusicContext從IdentityDbContext繼承,它仍然無法工作。所以我評論了Band和Band成員集,並且它工作了(我認爲這是因爲他們引用了從IdentityUser繼承的我的User類)。 – ddeamaral