“[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 将决定一个主键 属性。按照顺序,它是这样选择的:
- 如果您有一个名为
Id
的 属性。
- 如果您有一个名为
ClassNameId
的 属性(即您的 class 是 Book
,属性 将是 BookId
。)
- 具有
[Key]
属性的任何 属性(或复合键的多个属性)。
并且所有这些都可以在上下文的 OnModelCreating
方法中被覆盖。
所以您的情况是,您现有的 Id
属性 已被选为主键,添加属性没有任何区别。
请参阅 docs 了解有关其工作原理的更多信息。
[Key] 属性不应该将数据库字段设置为主键吗?我已经定义了 class,稍后当我尝试通过放置 [Key] 属性来设置主键时,添加迁移命令不会显示 up() 或 down() 方法中的任何更改。那么是不是意味着主键必须在开头声明并且不能更改?
我尝试创建一个没有主键的测试 class {id,name},一旦数据库更新,稍后当尝试将 id 字段设置为主键时,它没有看到 Add- 中的变化迁移,我缺少什么?
按照惯例,如果您不告诉它使用哪个主键,Entity Framework 将决定一个主键 属性。按照顺序,它是这样选择的:
- 如果您有一个名为
Id
的 属性。 - 如果您有一个名为
ClassNameId
的 属性(即您的 class 是Book
,属性 将是BookId
。) - 具有
[Key]
属性的任何 属性(或复合键的多个属性)。
并且所有这些都可以在上下文的 OnModelCreating
方法中被覆盖。
所以您的情况是,您现有的 Id
属性 已被选为主键,添加属性没有任何区别。
请参阅 docs 了解有关其工作原理的更多信息。