实体框架代码首先从数据库中添加Key属性

时间:2015-06-10 20:10:16

标签: entity-framework attributes ef-code-first primary-key data-annotations

从现有数据库生成代码第一个类时,KeyAttribute不会添加到表的主键属性中。

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

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

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

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

由于

2 个答案:

答案 0 :(得分:2)

这是正确的行为。请参阅下面https://msdn.microsoft.com/en-us/data/gg193958.aspx的摘要。

One of the conventions that code first depends on is how it implies which property is the key in each of the code first classes. That convention is to look for a property named “Id”...

这意味着如果你为你的PK命名,它会推断出Id是pk。

答案 1 :(得分:1)

请勿将主键列命名为“Id”

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

这是使用“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; }