如何在entity framework代码中首先为几个表生成标识种子值

我见过这个和这个 。 我只想为我的代码优先(EF6.1)表的ID列的起始值设定种子。 现在我可以做到这一点

public class CustomInitializer : CreateDatabaseIfNotExists { protected override void Seed(FormsDbContext context) { context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('MyTable', RESEED, 1000)"); } } 

但是因为我有很多很多桌子,所以我觉得它很奇怪(而且感觉差不多)我必须为所有这些重复上述线路。 我无法通过流畅的配置找到任何方法。 这是种子的正确方法吗?

谢谢

你可以尝试使用这个:

  internal class DefaultMigrationSqlGenerator : SqlServerMigrationSqlGenerator { protected override void Generate(AlterTableOperation alterTableOperation) { base.Generate(alterTableOperation); // If the tables you want to reseed have an Id primary key... if (alterTableOperation.Columns.Any(c => c.Name == "Id")) { string sqlSeedReset = string.Format("DBCC CHECKIDENT ({0}, RESEED, 1000) ", alterTableOperation.Name.Replace("dbo.", "")); base.Generate(new SqlOperation(sqlSeedReset)); } } } 

您可以使用多种不同的选项而不是AlterTableOperation,添加列,重命名列等以触发此操作在每个表上运行。 不幸的是,你必须做一些更新每个表的事情才能在每个表上注入你自己的动作。

另一种方法是在SQL Server中编写脚本 – 它不像是每天或每周发生。 遍历表格,重置每个表格上的种子。 但是如果你需要定期在所有表上发生某些事情,而不是在SQL Server中,那么我认为上面的方法是可行的。