我目前有2个实体,Player
和Role
。我正在尝试为这两个实体创建迁移(第一次迁移)。
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
实体仍然出现错误?
答案 0 :(得分:1)
即使这是一个愚蠢的错误,我仍然希望将其保留在这里以备将来参考,以防万一有人犯同样的错误。
我忘了在属性上添加二传手。我必须将属性更改为此:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
然后它起作用。