Entity framework &引用;[关键点]”;属性应该将列设置为主列,但不是,EF代码优先方法

Entity framework &引用;[关键点]”;属性应该将列设置为主列,但不是,EF代码优先方法,entity-framework,ef-code-first,Entity Framework,Ef Code First,[Key]属性不应该将数据库字段设置为主键吗?我已经定义了一个类,后来当我试图通过放置[key]属性来设置主键时,Add migration命令没有显示up()或down()方法中的任何更改。那么这是否意味着主键必须在开始时声明,并且不能更改 我试图创建一个没有主键的测试类{id,name},一旦数据库被更新,之后当我尝试将id字段设置为主键时,它没有看到Add迁移中的更改,我缺少什么 按照惯例,如果您不告诉实体框架使用哪个主键属性,实体框架将决定主键属性。按照顺序,它是这样选择的: 如果您有一

[Key]属性不应该将数据库字段设置为主键吗?我已经定义了一个类,后来当我试图通过放置[key]属性来设置主键时,Add migration命令没有显示up()或down()方法中的任何更改。那么这是否意味着主键必须在开始时声明,并且不能更改


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

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

  • 如果您有一个名为
    Id
    的属性
  • 如果您有一个名为
    ClassNameId
    的属性(即您的类是
    Book
    ,则该属性将是
    BookId
  • 具有
    [key]
    属性的任何属性(或复合键的多个属性)
  • 所有这些都可以在上下文的
    OnModelCreating
    方法中重写

    因此,对您来说,现有的
    Id
    属性已经被选为主键,添加属性没有任何区别


    有关如何工作的详细信息,请参阅。

    要将
    [Key]
    属性添加到的属性的名称是什么?类的名称是什么?类的名称是
    Test
    ,试图将
    Id
    更新为
    [Key]
    ,如果您创建了一个名为
    Id
    (或
    TestID
    )的字段的类,则它将已经是一个Key by。稍后添加标记不会产生任何新的效果。数据库显示了什么?为了验证它,我为
    Id
    创建了没有
    [Key]
    Test
    类。表中没有主键(我的意思是它没有在ManagementStudio的列左侧显示键图标)。但在添加属性后,它什么也不做。实体框架无法处理没有键的表,如果EF创建了表,那么它绝对有键。