Entity Framework Core 需要定义一个主键
Posted
技术标签:
【中文标题】Entity Framework Core 需要定义一个主键【英文标题】:Entity Framework Core requires a primary key to be defined 【发布时间】:2020-10-18 06:03:30 【问题描述】:我目前有 2 个实体,Player
和 Role
。我正在尝试为这两个实体创建迁移(第一次迁移)。
播放器.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
实体并将 Player
的 Role
更改为 int,则它可以工作。所以Player
实体是正确的,而两个实体的Id属性完全一样。
为什么我仍然收到Role
实体的错误?
【问题讨论】:
您缺少角色类属性的设置器。 @Gusman 哦,天哪……这很尴尬。感谢您指出! 【参考方案1】:即使这是一个愚蠢的错误,我仍然想把它留在这里以备将来参考&以防有人犯同样的错误..
我忘记在我的属性上添加设置器。我不得不将我的属性更改为:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id get; set;
[Required]
public string Name get; set;
然后它就起作用了。
【讨论】:
感谢您指出我忘了在答案中实际添加 setter以上是关于Entity Framework Core 需要定义一个主键的主要内容,如果未能解决你的问题,请参考以下文章
使用Entity Framework Core需要注意的一个全表查询问题