【问题标题】:Scaffold-DbContext naming convention ignores [Key] attribute. How to stop it?Scaffold-DbContext 命名约定忽略 [Key] 属性。如何阻止它?
【发布时间】:2020-01-18 18:39:06
【问题描述】:

在 EF Core“数据库优先” 场景中,建议使用 Scaffold-DbContext 将 db 架构逆向工程为 C# 模型类。我已经尝试过了,发现当主键与 EFCore 使用的命名约定匹配时,不会生成它们的属性。例子:

示例 1:

CREATE TABLE item (
    weirdId INT PRIMARY KEY IDENTITY,

);

将转换成这个类:

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

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

CREATE TABLE item (
    id INT PRIMARY KEY IDENTITY,

);

将转换成这个类:

[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

【问题讨论】:

    标签: c# sql-server .net-core entity-framework-core ef-core-2.1


    【解决方案1】:

    在搭建脚手架时添加-d

    【讨论】:

    • 没有。那只会切换到 DataAnnotation(我已经这样做了)。如果模式符合命名约定,就像我在“示例 2”中展示的那样,Key 属性仍然不会生成。
    【解决方案2】:

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

    【讨论】:

    • 哦,谢谢!这就是我所说的。但是..我有最新的 VS2019 但 EFCore 3.0 仍然不可用。我应该手动安装吗?是否安全/稳定发布?
    • 下周发布!
    【解决方案3】:

    目前,我与 Oracl.EF 一起使用,它缺少对象的 [Key]。 但是,这非常重要。我们应该怎么停下来。我的命令:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 2010-10-23
      • 2014-03-29
      • 1970-01-01
      • 2015-10-26
      相关资源
      最近更新 更多