如何首先在实体框架代码中设置身份主键的起始值?

Posted

技术标签:

【中文标题】如何首先在实体框架代码中设置身份主键的起始值?【英文标题】:How to set starting value for an Identity primary key in Entity Framework code first? 【发布时间】:2019-02-21 18:16:31 【问题描述】:

在我的项目中,我首先使用实体​​框架代码创建Appointments 表。当我将整数主键AppointmentNo 设置为[Key][Required] 时,它会创建初始主键以1 开头的表。

我希望约会号码从 1000 开始。我的数据库是 SQL Server。请帮我。先感谢您。

[DataContract]
public class Appointment

    [DataMember]
    [Key]
    [Required]
    public int AppointmentNo  get; set; 

    [DataMember]
    [Required]
    public string DoctorUN  get; set; 

    [DataMember]
    [Required]
    public string PatientUN  get; set; 

【问题讨论】:

可能是***.com/questions/5974554/…的副本 【参考方案1】:

不能使用ef注解,但是可以在迁移UP方法中执行sql

Sql("DBCC CHECKIDENT ('Appointment', RESEED, 1000)");

【讨论】:

我从 SQL Server Management Studio 创建了表,并在执行代码之前在那里使用了您的查询,这样就完成了工作。谢谢【参考方案2】:

EF 核心 3.1 您可以在更新数据库之前打开迁移脚本并对其进行编辑。 EF 为标识列创建此行: .Annotation("SqlServer:Identity", "1, 1"),

您可以将其更新为您想要的任何内容:

.Annotation("SqlServer:Identity", "你的起始值,你的增量值"),

示例:如果我希望 tblOrder 上的 OrderId 列从 1000 开始并递增 1:

migrationBuilder.CreateTable(
    name: "tblOrder",
    schema: "dbo",
    columns: table => new
    
        OrderID = table.Column<int>(nullable: false)
            .Annotation("SqlServer:Identity", "1000, 1"),        
        CDate = table.Column<DateTime>(nullable: false, defaultValueSql: "getdate()")
    ,
.
.
.

【讨论】:

【参考方案3】:

只要主键属性的类型是数字或 GUID,Code First 就会按照惯例自动将键配置为标识列。

来自:EF and identity columns

【讨论】:

但是有没有办法将起始值设置为特定值并从该点开始递增? 从文档中不清楚。不过之后很容易修复。和一个很好的反对代码的论据。 (点燃!) 在回答之前仔细阅读问题

以上是关于如何首先在实体框架代码中设置身份主键的起始值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在实体框架中为复合主键的特定列创建外键

除了id,如何在strapi中设置主键?

如何在 SQL Server 或实体框架中创建没有主键的一对多关系?

可以使用实体框架在另一个表中调用两次作为外键的主键吗?

使用在多个列上具有主键的实体框架更新数据库

如何使用 RKObjectMapping 在嵌套的 RLMObject 中设置相同的主键?