我正在研究迁移以清理我们的部署过程。将更改推送到生产环境时所需的人工干预越少越好。
我在迁移系统中遇到了 3 个主要问题。如果我想不出一个干净的方式绕过它们,它们就是表演的终结者。
1.如何在每次迁移时添加种子数据:
我执行命令“add-migration”,它使用 Up 和 Down 函数构建一个新的迁移文件。现在,我想通过 Up 和 Down 更改自动更改数据。我不想将种子数据添加到 Configuration.Seed 方法中,因为它适用于所有以各种重复问题结束的迁移。
2. 如果以上都做不到,如何避免重复?
我有一个枚举,我循环遍历以将值添加到数据库中。
foreach(var enumValue in Enum.GetValues(typeof(Access.Level)))
{
context.Access.AddOrUpdate(
new Access { AccessId = ((int)enumValue), Name = enumValue.ToString() }
);
}
context.SaveChanges();
即使我使用的是 AddOrUpdate,我仍然在数据库中得到重复项。上面的代码把我带到了我的第三个也是最后一个问题:
3. 我怎样才能播种主键?
我用上面的代码枚举的是:
public class Access
{
public enum Level
{
None = 10,
Read = 20,
ReadWrite = 30
}
public int AccessId { get; set; }
public string Name { get; set; }
}
我正在指定我想要作为主键的值,但 Entity Framework 似乎忽略了它。他们最终仍然是 1,2,3。我如何让它成为 10,20,30?
目前是 EF 的这些限制,还是故意限制以防止我没有看到的其他类型的灾难?