Scaffold-DbContext 命名约定忽略 [Key] 属性。如何阻止它?

Scaffold-DbContext naming convention ignores [Key] attribute. How to stop it?

在EF Core "Database first"场景下,推荐使用Scaffold-DbContext将db schema逆向工程为C#模型classes。我试过了,发现当主键与 EFCore 使用的命名约定匹配时,不会生成它们的属性。示例:

示例 1:

CREATE TABLE item (
    weirdId INT PRIMARY KEY IDENTITY,

);

将转换成这个class:

[Table("item")]
public class Item
{
    [Key]
    [Column("weirdId")]
    public int WeirdId { get; set; }
}

示例 2:(提示:[Key] 属性被忽略

CREATE TABLE item (
    id INT PRIMARY KEY IDENTITY,

);

将转换成这个class:

[Table("item")]
public class Item
{
    [Column("id")]
    public int Id { get; set; }
}

我的问题是:

  1. 我的想法是否正确,这种有计划的行为? 示例 2 中的 Id 是否仍被视为主键?

  2. 如何停止?如何显式添加主键[Key]属性?我很确定 EFCore 正在为 FK 做同样的事情,天知道还有什么。我喜欢命名约定,但讨厌魔法。我喜欢代码的一致性,所以如果我在一个实体中有 [Key],我希望它以相同的方式在所有实体中使用。请告诉我 Scaffold-DbContext 中有一个开关可以更明确吗?

编辑: 我不是说切换到 -DataAnnotations。它仍然不起作用。如果满足模式(如示例 2),它仍然不会生成 Key

在搭建脚手架时添加 -d

这已在 EF Core 3.0 中修复,其中使用 DataAnnotations 时始终会生成 Key https://github.com/aspnet/EntityFrameworkCore/pull/16682

目前,我使用的是Oracl.EF,它缺少对象的[Key]。 但是,这很重要。怎能停下。我的命令:

Scaffold-DbContext "ConnectionString" Oracle.EntityFrameworkCore -OutputDir OracleModels -DataAnnotations  -force;