我看过this和this。我只想为我的代码优先(EF6.1)表的ID列的起始值设定种子。现在我可以做到这一点
public class CustomInitializer : CreateDatabaseIfNotExists<FormsDbContext>
{
protected override void Seed(FormsDbContext context)
{
context.Database.ExecuteSqlCommand("DBCC CHECKIDENT ('MyTable', RESEED, 1000)");
}
}
但是由于我有很多很多桌子,我发现它很奇怪(而且感觉差不多)我必须为所有这些重复上述线路。我无法通过流畅的配置找到任何方法。这是种子的正确方法吗?
由于
答案 0 :(得分:4)
你可以试试这个:
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中,那么我认为以上是可行的方法。