Entity framework 实体框架代码首先来自数据库,不添加键属性

Entity framework 实体框架代码首先来自数据库,不添加键属性,entity-framework,attributes,ef-code-first,primary-key,data-annotations,Entity Framework,Attributes,Ef Code First,Primary Key,Data Annotations,从现有数据库生成代码优先类时,不会将KeyAttribute添加到表的主键属性中 数据库中的所有表都有一个名为Id的int-PK列,没有复合键 表单生成器和其他类通过对内部逻辑的反射使用此属性 在重新生成模型类时,我是否可以配置Entity Framework以将KeyAttribute添加到主键属性? 或 我必须通过MetadataType属性手动注释所有键属性,并更改代码以支持元数据类型? 谢谢不要将主键列命名为“Id” 由于某些原因,当列名为“Id”时,代码不会首先从现有数据库向导中添加键

从现有数据库生成代码优先类时,不会将KeyAttribute添加到表的主键属性中

数据库中的所有表都有一个名为Id的int-PK列,没有复合键

表单生成器和其他类通过对内部逻辑的反射使用此属性

在重新生成模型类时,我是否可以配置Entity Framework以将KeyAttribute添加到主键属性?

我必须通过MetadataType属性手动注释所有键属性,并更改代码以支持元数据类型?


谢谢不要将主键列命名为“Id”

由于某些原因,当列名为“Id”时,代码不会首先从现有数据库向导中添加键属性

这是使用“Id”列生成的代码:

[Table("tabla")]
public partial class tabla
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }
这是将“Id”重命名为“llave”生成的代码

[Table("tabla")]
public partial class tabla
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int llave { get; set; }

这是正确的行为。请参阅下面的代码片段

code-first所依赖的约定之一是它如何暗示哪个属性是每个code-first类中的键。该约定是查找名为“Id”的属性。…


这意味着,如果您命名pk Id,它将推断Id就是pk。

您使用哪个工具生成代码?使用visual studio,使用ado.net实体数据模型添加新项对话框,选择“从数据库中首先生成代码”选项,是否生成流畅的映射?是的,VisualStudioCodeFirst向导会生成流畅的映射,但从未调用HasKey方法,这是主键映射方法。您的表是否真的有主键(而不仅仅是唯一索引)?