Во всех примерах и статьях, которые я видел о заполнении данных с помощью EF Core, все данные жестко запрограммированы.Мне нужно заполнить некоторые данные, где их часть является переменной.Моя модель:
public class Customer
{
[Key]
public Guid Id { get; set; }
public string ApiKey { get; set; }
}
В частности, я хочу, чтобы ApiKey
содержал различное значение каждый раз, когда выполняется начальная операция.Таким образом, я получаю разные значения для каждой среды (разработка, контроль качества, производство).
Я создал метод для генерации уникального значения и добавил следующее к моему OnModelCreating
методу.
modelBuilder.Entity<Customer>().HasData(new Customer
{
Id = Guid.NewGuid(),
ApiKey = GenerateApiKey()
});
Проблема, как вы, наверное, догадались, заключается в том, что вызов GenerateApiKey
происходит при создании миграции, поэтому значение, сгенерированное GenerateApiKey
, эффективно жестко закодировано в вызове InsertData
.
migrationBuilder.InsertData(
table: "Customers",
columns: new[] { "Id", "ApiKey" },
values: new object[]
{
new Guid("bcde0c82-ad26-47fb-bd5f-1ad552d2b8f0"),
"56+hhUTjPwz0FM9uwYg19M5rfq6aUgmNde15Frn6TFY="
});
В EF 6.x я выполнил это с помощью Seed
метод моего DbMigrationsConfiguration
подкласса.
Я понимаю, что могу изменить миграцию, но мы находимся на стадии разработки, когда мы отбрасываем и воссоздаем базу данных во время изменений, и это потребует от каждого разработчика не забыть сделатьчто, когда они восстанавливают начальную миграцию.Я бы предпочел сделать его немного более надежным, чем это.