我有一个现有的应用程序,我正在将它重写为带有 ReactJS 前端的 .NET Core API。我还在 API 端,遇到了问题。
代码
我有一个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; }
}
我需要BbUser
和之间的一对多关系Artist
。一个用户可以提交多个艺术家和歌词...等。真的很简单的东西。
问题
该应用程序构建良好,但是当我尝试通过点击需要访问数据库的控制器来运行它时,我收到以下错误:
实体类型“IdentityUserLogin”需要定义一个主键。
我在使用常规 EF Code First(不是 Core)时遇到了这个问题,对此的修复在这里不起作用。
如果我在 DbContext 类中使用下一个代码,则此模型对我有用(已编译,并且在运行时没有异常):
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<BbUser>(b => b.ToTable("AspNetUsers"));
base.OnModelCreating(builder);
}
不打电话base.OnModelCreating(builder)
我得到同样的错误,因为在这种情况下,上下文没有应用与身份相关的模式。
更新:正如您从下面的屏幕截图中看到的那样,一切对我来说都很好:
我还有一个想法,为什么会出现这样的错误。你的 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);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句