c# - Entity Framework Core 需要定义一个主键
问题描述
我目前有 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
实体并将其更改Role
为Player
int,它就可以工作。所以Player
实体是正确的,而两个实体的 Id 属性是完全一样的。
为什么我仍然收到Role
实体错误?
解决方案
即使这是一个愚蠢的错误,我仍然想将其保留在这里以供将来参考,以防有人犯同样的错误。
我忘了在我的属性上添加设置器。我不得不将我的属性更改为:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
然后它就起作用了。
推荐阅读
- r - Pheatmap:在树状图中重新排序叶子
- css - 样式数据库以不同的方式获取图像,同时使用 django 模板进行标记
- c# - Unity AssetBundle 获取内存设备(ROM,Total Memory)
- xamarin - 在 xamarin 表单 wpf 中单击列表之外时,分组的 ListView 会引发 Index Out of Range 异常
- vhdl - 如何在case语句中使用迭代变量[VHDL]
- r - 闪亮表中的数学模式
- php - 标记和刷新页面
- android - 如何从android Fragmengt获取列表或元素?
- delphi - 哪个 Indy TIdHTTPServer 代码负责 SSL 版本和密码的服务器端检查?
- javascript - 尝试通过单击按钮更改背景颜色