Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net核心API,具有EF核心代码优先和IdentityUser_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# .Net核心API,具有EF核心代码优先和IdentityUser

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

我有一个我正在重新编写的带有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
{
  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);
        }
    }