EF Core Fluent API(如何从主键中删除标识)

22

看起来很简单,但我无法找到方法告诉 EF Core 不要创建带有自增标识列的实体的主键。 我想手动插入自己的主键值。我知道我可以使用属性来实现这一点,但我想知道如何通过 Fluent API 设置行为。我看到了 UseSqlServerIdentityColumn() 方法从 Property() 方法中,但我需要将其关闭(而不是打开)。我也尝试了以下代码,但它不起作用。

context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Employees ON");
context.SaveChanges();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Employees OFF");
2个回答

36

4
从EFCORE 5开始,这种方法不再起作用。这样做会导致错误:“要更改列的IDENTITY属性,需要删除并重新创建该列。” - Kevingy
3
生成的迁移代码存在问题;本答案中的代码仍然是配置模型的适当解决方案。此回答提供了一种解决方法:https://dev59.com/llQJ5IYBdhLWcg3wpHjI#56648859。 - Moho
Kevingy 是正确的。我正在创建一个全新的数据库,但是 "ValueGeneratedNever()" 没有任何效果。我已经多次删除了数据库,每一次重新创建时都会启用 Identity。所提出的解决方法对我不起作用(EF Core 5.0.11 和 MSSQL 2016 SP1)。 - Paullus Nava

3

有属性的话也是可以实现的。

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接