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; }
}
我的问题是:
我的想法是否正确,这种有计划的行为? 示例 2 中的 Id
是否仍被视为主键?
如何停止?如何显式添加主键[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;
在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; }
}
我的问题是:
我的想法是否正确,这种有计划的行为? 示例 2 中的
Id
是否仍被视为主键?如何停止?如何显式添加主键[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;