на этапе иницилизации?
Загугли ef core seeder
https://docs.microsoft.com/ru-ru/ef/core/modeling/data-seeding Я так понимаю это? HasData добавит нужные записи?
Да, есть и другой способ
Создаешь класс AppContextSeed public class AppContextSeed { private readonly AppContext _ctx; #region Constructor public RecruitmentAgencyContextSeed(AppContext ctx) { _ctx = ctx; } #endregion public async Task SeedAsync() { _ctx.Database.EnsureCreated(); #region Permissions if (!_ctx.Permissions.Any()) { Permission[] permissions = new Permission[4] { new Permission{ Name = "Read", CreatedDate = DateTime.Now }, new Permission{ Name = "Write", CreatedDate = DateTime.Now }, new Permission{ Name = "ReadWrite", CreatedDate = DateTime.Now }, new Permission{ Name = "NoAccess", CreatedDate = DateTime.Now } }; foreach (var item in permissions) { _ctx.Permissions.AddAsync(item); } await _ctx.SaveChangesAsync(); } #endregion } } Регистрируешь в стартапе services.AddScoped<AppContextSeed>(); В классе Main вызываешь метод SeedAsync() public class Program { public async static Task Main(string[] args) { IHost host = CreateHostBuilder(args).Build(); using (IServiceScope scope = host.Services.CreateScope()) { try { AppContextSeed seeder = scope.ServiceProvider.GetRequiredService<AppContextSeed>(); await seeder.SeedAsync(); } catch (Exception ex) { ILogger<Program> logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>(); logger.LogError(ex, "An error occurred while migrating or seeding the database."); throw; } } await host.RunAsync(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
Какое-то странное решение, оно же будет применяться после всех миграций? А если модели поменяются, то и код в этом классе тоже придется менять? Зачем какие-то куски миграций выносить в обычные классы, где это все будет инфрастуктурно распологаться?
Не после всех миграций, а в начале проекта)
https://stackoverflow.com/a/38240540/11565032 EnsureCreated is designed for testing or rapid prototyping where you are ok with dropping and re-creating the database each time
да да так и есть
делай сразу через миграции, потом легче будет
Ну это разве в миграции не запишется?
не уверен что сработает итеративно, то есть если создать первую миграцию, в неё записать через hasdata в контексте, потом добавить пару строчек hasdata в контексте то миграция подхватит
Господи как всё сложно у вас дотнетчиков, когда это уже закончится и я вернусь в ламповый С++...
делай миграцию прямым SQL, только тут не особо легко поддерживать версионность миграций
всё поначалу сложно
Мне в прицнипе пофиг, главное чтобы работало более-менее
Что за советы блин, чем HasData не устраивает?
ну если не устраивают встроенные фичи EFа
а можно позже добавить начальные данные?
https://github.com/dotnet-architecture/eShopOnContainers/blob/d0cd2830a864a8b975341b02b93a0887a3908c04/src/Services/Catalog/Catalog.API/Infrastructure/CatalogContextSeed.cs#L22
Я как раз с плюсов на шарп перекотился, потому что прод писать на плюсах бывает очень больно. Особенно если нужно сопровождать чужой код, а люди, который его писали свалили
Ну это смотря какой проект и прочее
и каковы ощущения после переезда?
Обсуждают сегодня