实体框架核心要求定义主键

时间:2020-06-27 20:08:14

标签: c# entity-framework

我目前有2个实体,PlayerRole。我正在尝试为这两个实体创建迁移(第一次迁移)。

Player.cs:

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Stargazer.Game.Roles;

namespace Stargazer.Game.Players
{
    [Table("players")]
    public class Player
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        
        [Required]
        [MaxLength(15)]
        public string Username { get; set; }
        
        [Required]
        public string Password { get; set; }
        
        [Required]
        public string Email { get; set; }
        
        public string Motto { get; set; }
        
        [Required]
        public string Figure { get; set; }
        
        [Required]
        public char Gender { get; set; }
        
        [Required]
        public Role Role { get; set; }
        
        [Required]
        [DefaultValue(500)]
        public int Coins { get; set; }
        
        public string? ConsoleMotto { get; set; }
        
        [Required]
        public string Salt { get; set; }
    }
}

和Role.cs:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Stargazer.Game.Roles
{
    [Table("roles")]
    public class Role
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; }
        
        [Required]
        public string Name { get; }
    }
}

但是,仅对于Role,我会收到此错误:

System.InvalidOperationException:实体类型“角色”需要定义主键。如果您打算使用无密钥实体类型,请调用“ HasNoKey()”

但是,如果我删除了Role实体并将Role的{​​{1}}更改为一个int,它将起作用。因此Player实体是正确的,而两个实体的Id属性完全相同。

为什么Player实体仍然出现错误?

1 个答案:

答案 0 :(得分:1)

即使这是一个愚蠢的错误,我仍然希望将其保留在这里以备将来参考,以防万一有人犯同样的错误。

我忘了在属性上添加二传手。我必须将属性更改为此:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
        
[Required]
public string Name { get; set; }

然后它起作用。