“[Key]”属性应该将列设置为主列但不是,EF 代码优先方法

"[Key]" attribute supposed to set the column as primary but its not, EF code first approach

[Key] 属性不应该将数据库字段设置为主键吗?我已经定义了 class,稍后当我尝试通过放置 [Key] 属性来设置主键时,添加迁移命令不会显示 up() 或 down() 方法中的任何更改。那么是不是意味着主键必须在开头声明并且不能更改?

我尝试创建一个没有主键的测试 class {id,name},一旦数据库更新,稍后当尝试将 id 字段设置为主键时,它没有看到 Add- 中的变化迁移,我缺少什么?

按照惯例,如果您不告诉它使用哪个主键,Entity Framework 将决定一个主键 属性。按照顺序,它是这样选择的:

  1. 如果您有一个名为 Id 的 属性。
  2. 如果您有一个名为 ClassNameId 的 属性(即您的 class 是 Book,属性 将是 BookId。)
  3. 具有 [Key] 属性的任何 属性(或复合键的多个属性)。

并且所有这些都可以在上下文的 OnModelCreating 方法中被覆盖。

所以您的情况是,您现有的 Id 属性 已被选为主键,添加属性没有任何区别。

请参阅 docs 了解有关其工作原理的更多信息。