C# .Net核心API,具有EF核心代码优先和IdentityUser
我有一个我正在重新编写的带有ReactJS前端的.NET核心API。我还在API端,遇到了一个问题 代码 我有一个BbUser.cs实体类,其代码如下:C# .Net核心API,具有EF核心代码优先和IdentityUser,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我有一个我正在重新编写的带有ReactJS前端的.NET核心API。我还在API端,遇到了一个问题 代码 我有一个BbUser.cs实体类,其代码如下: public class BbUser : IdentityUser { public int Points { get; set; } = 0; public string DisplayUsername { get; set; } } 我还有一个Artist.cs实体类: public class Artist { publi
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和艺术家之间的一对多关系。一个用户可以提交许多艺术家和歌词…等等。简单的东西
问题
该应用程序构建良好,但当我试图通过点击需要访问数据库的控制器来运行它时,会出现以下错误:
实体类型“IdentityUserLogin”需要定义主键
我对常规EF代码有此问题,首先不是核心代码,在这里不起作用。此模型适用于mecompiled,如果我在DbContext类中使用下一个代码,则在运行时没有异常:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<BbUser>(b => b.ToTable("AspNetUsers"));
base.OnModelCreating(builder);
}
请尝试声明名为Id的Guid属性,在IdentityUserLogin实体上同时使用Get和Set
另一种选择是声明一个属性,并用[Key]属性装饰它我刚才说了。遗憾的是,我也遇到了同样的错误。@Ciwan奇怪,你能展示一下产生这种错误的LINQ查询吗?我没有这样的LINQ查询。我只是想测试以确保我的数据库被创建,所以我通过构造函数在我的上下文中创建了一个传递。这将迫使EF Core创建我的数据库,正如您所看到的,这个错误会阻碍我创建数据库。@Ciwan我明白了,请检查我更新的答案,使用它的解决方案对我来说效果很好。我使用的是DbContext。我将其更改为IdentityDbContext,现在一切正常。谢谢你。很
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);
}
}