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