我正在研究迁移以清理我们的部署过程。在向生产环境推送更改时,需要尽量减少手动干预。
我遇到了三个主要问题,如果找不到一个干净的解决方法,它们将成为障碍。
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目前存在的限制吗?还是有意为之的限制,以防止我没有看到的其他灾难发生?
SqlResource()
方法。请参见http://www.jasoncavett.com/blog/managing-more-complicated-entity-framework-migrations/。也许在您的答案中提到这一点会很有趣? - JBert