2011-05-12 99 views
28

我有一个实体类EF代码优先 - 如何设置身份种子?

public class Employee 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 
} 

我已经设置ID字段作为与汽车数生成

modelBuilder.Entity<Employee>().HasKey(e => e.Id); 
modelBuilder.Entity<Employee>().Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

主键,但我想要的身份从10000,而不是从1这是种子默认。我如何在EF中指定它?

+0

您必须在创建表格时指定 – Saleh 2011-05-12 07:15:32

+2

@LIghtWing EF代码首先会为您自动创建表格。问题是如何让EF在创建表时为您设置种子值,而不是如何手动完成。 – 2011-05-12 07:18:22

+0

哦,你想EF创建你的table.ok我看到。 – Saleh 2011-05-12 07:19:57

回答

32

如果您使用的是SQL Server,则必须创建自定义数据库的初始化和手动执行DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)。用自定义SQL命令创建和使用自定义初始化程序,请选择this answer

+5

代码优先,数据库特定的SQL最后;) – Baldy 2011-05-12 07:31:03

+10

代码优先是基于你对数据库没有任何要求的事实。如果您有要求,则必须引入数据库特定的SQL。 – 2011-05-12 07:32:37

9

基于拉吉斯拉夫Mrnka的答案,你可以在你的迁移文件中添加此Up方法:

Sql("DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)"); 
+1

感谢您使用仅与VS一起工作的解决方案,而不是需要更多部署工作的SQL Server。 – 2016-11-16 19:57:38

+0

恕我直言 - 这应该是被接受的答案。这是更“守则先行”的方式。将所有数据库构建逻辑放入迁移中,以便在重建数据库日/周/月后,没有什么可以遗忘的。 – 2017-07-19 12:51:55

0

根据@ ehsan88你可以做一个数据库初始化类

public class AccDatabaseInitializer : CreateDatabaseIfNotExists<YourContect> 
    { 
     protected override void Seed(YourContect context) 
     { 
      context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('TableName', RESEED, NewSeedValue)"); 
      context.SaveChanges(); 
     } 
    } 

感谢