Я изучаю Migrations, чтобы очистить наши процессы развертывания. Чем меньше ручное вмешательство требуется при нажатии на изменение в производстве, тем лучше.
Я столкнулся с тремя основными корягами с системой миграции. Это шоу-стопперы, если я не могу понять, как их можно обойти.
1. Как добавить данные Seed для каждой миграции:
Я выполняю команду add-migration, которая создает новый файл миграции с функциями Up и Down. Теперь я хочу автоматически вносить изменения в данные с изменениями Up и Down. Я не хочу добавлять данные Seed в метод 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 в данный момент или являются ли они преднамеренными ограничениями для предотвращения какой-либо другой катастрофы, которую я не вижу?