.Net核心API与EF核心代码第一和IdentityUser
问题描述:
我有一个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; }
}
我需要一个单BbUser
和Artist
之间的一对多关系。一位用户可以提交许多艺术家和歌词......等等。简单的东西真的。
问题
应用程序建立很好,但是当我试图通过打需要访问数据库中的一个控制器来运行它,我得到以下错误:
The entity type 'IdentityUserLogin' requires a primary key to be defined.
我有这个问题与常规EF代码优先(而不是核心)和the fix for that,不起作用。
答
这种模式为我工作(编制,并在运行时也不例外),如果我用下面的代码中的DbContext类:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<BbUser>(b => b.ToTable("AspNetUsers"));
base.OnModelCreating(builder);
}
如果不调用base.OnModelCreating(builder)
,我得到了同样的错误,因为在这种情况下,背景ISN不应用身份相关模式。
我还有一个想法,为什么你能有这样的错误。您的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);
}
}
我只是说干就干,[试过你的建议(https://www.screencast.com/t/xnwgQlAt4)装饰。可悲的是我得到了同样的错误。 – Ciwan
@Ciwan奇怪,你能展示LINQ查询哪些产生这样的错误? – user2771704
我没有这样的LINQ查询。我只是想测试以确保我的Db被创建,所以我创建了一个[DummyController](https://gist.github.com/Ciwan1859/e9a2d6ddcee0c2145a2b3e434c4021af),通过构造函数在我的上下文中传递。这应该强制EF Core创建我的数据库,正如您所看到的那样,该错误阻碍了这一点。 – Ciwan