Я изучаю миграцию, чтобы очистить наши процессы развертывания. Чем меньше ручное вмешательство требуется при нажатии на изменение производства, тем лучше.Entity Framework - миграция - первый код - седиментация на миграцию
Я столкнулся с тремя основными корягами с системой миграции. Это шоу-стопы, если я не могу понять, как их можно обойти.
1. Как добавить данные семян в миграции:
я выполнить команду «надстройку миграции», который каркасах новый файл миграции с функциями вверх и вниз. Теперь я хочу автоматически вносить изменения в данные с изменениями 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 на данный момент или являются ли они преднамеренными ограничениями для предотвращения какой-либо другой катастрофы, которую я не вижу?
У меня есть данные в этом методе семени. Но он продолжает добавлять дубликаты, хотя я использую AddOrUpdate. Проблема в том, что когда я использую «add-migration», она не создает собственную конфигурацию. Поэтому, независимо от того, какую миграцию вы выполняете, он по-прежнему выполняет общий метод семени, который я не хочу. Я хочу иметь отдельный метод Seed для файла миграции. – Talon
look У меня есть аналогичная проблема. Что я сделал в конструкторе DbMigrationsConfiguration; Вы должны установить MigrationsNamespace, например, this.MigrationsNamespace = «DataAccessLayer.Repository.Migrations»; и в желаемом файле миграции вам необходимо изменить пространство имен в соответствии с DbMigrationsConfiguration. Этот трюк, который я основал сам после долгого боя, и теперь Entity Framework пойдет только в желаемом файле миграции. Я надеюсь, что это решит вашу проблему. 2. –
Я думаю, что в конце концов миграция все еще находится на стадии младенчества и нуждается в определенном времени для развития. Я добавил то, что я закончил делать. Похоже, вы создали целую новую папку миграции с одним файлом миграции в каждом. Я попробую это однажды, но прямо сейчас я уже потратил слишком много времени и должен спешить. Спасибо за помощь! – Talon