Правильный способ обновления данных в таблицах поиска с ядром EFcore / ASP. net? Я делаю это методом семени или другим способом? - PullRequest
0 голосов
/ 13 января 2020

Сейчас я нахожусь в разработке и использую приведенный ниже код для заполнения таблиц поиска. Но как только он будет в производстве, и я хочу добавить дополнительные данные, как мне это сделать? Я использую какой-то AddOrUpdate (не в ядре) в методе заполнения? Написать SQL скрипт?

 private static async Task SeedRfReportStateTypesAsync(PwdrsContext pwdrsContext)
    {
        if (pwdrsContext.RfReportStateTypes.Any())
        {
            return;
        }

        List<RfReportStateType> rfReportStateTypes = new List<RfReportStateType>()
        {
            new RfReportStateType() { Name = "Draft", UpdatedBy = "SYSTEM", UpdatedOn = DateTime.Now}, //4
            new RfReportStateType() { Name = "Review", UpdatedBy = "SYSTEM", UpdatedOn = DateTime.Now}, //3
            new RfReportStateType() { Name = "Stage", UpdatedBy = "SYSTEM", UpdatedOn = DateTime.Now}, //2
            new RfReportStateType() { Name = "Prod", UpdatedBy = "SYSTEM", UpdatedOn = DateTime.Now} //1
        };

        pwdrsContext.RfReportStateTypes.AddRange(rfReportStateTypes);
        await pwdrsContext.SaveChangesAsync();
    }

Ответы [ 2 ]

3 голосов
/ 13 января 2020

Способ посева в настоящее время устарел. Если вы обрабатываете заполнение как , то вы должны , а затем вставлять, обновлять и т. Д. c. из начальных данных обрабатываются автоматически EF Core. Теперь это делается с помощью свободной конфигурации в OnModelCreating в вашем контексте:

modelBuilder.Entity<RfReportStateType>().HasData(
    new RfReportStateType { Id = 4, Name = "Draft" },
    new RfReportStateType { Id = 3, Name = "Review" },
    new RfReportStateType { Id = 2, Name = "Stage" },
    new RfReportStateType { Id = 1, Name = "Prod" }
);

Несколько замечаний. Во-первых, вы должны включить идентификатор. Это значит, что EF Core знает, какие элементы вставлять, обновлять или удалять. Новые идентификаторы будут вставлены, удаленные идентификаторы будут удалены, а все существующие будут обновлены. Это также позволяет создавать отношения и тому подобное, поскольку идентификаторы известны. Во-вторых, такие вещи, как UpdatedOn, должны обрабатываться через автоматически сгенерированное значение , а не указываться в начальных данных, так как в противном случае оно будет запускать обновление при каждом запуске, поскольку DateTime.Now всегда будет отличаться Один бег к другому. Таким образом, вы также можете указать, должен ли он генерироваться только при добавлении или обновлении, что делает его идеальным для таких вещей, как даты создания / обновления. Как правило, ваши начальные данные должны содержать только значения stati c, поэтому обновления запускаются только при конкретном изменении одного из этих значений. В-третьих, вы можете включить UpdatedBy, если хотите, но это, вероятно, будет лучше обрабатываться значением по умолчанию в столбце, т. Е. Это SYSTEM, если не передано что-то более конкретное c.

0 голосов
/ 13 января 2020

Реализация FluentMigration

Это позволит вам заполнять данные для каждой применяемой миграции.

Вы также можете выполнить миграцию просто для вставки / обновления данных, которые будут выполняться в каждом экземпляре (dev /qa/stagging/production).

Смотрите это сообщение: { ссылка }

...