簡體   English   中英

實體框架核心運行種子

[英]Entity Framework Core run seed

我使用EF Core創建AppDBContextAppDbContextSeed

AppDbContextSeed

public class AppDbContextSeed
{
    private readonly AppDbContext _dbContext;
    private UserManager<AppUser> _userManager;
    private RoleManager<AppRole> _roleManager;

    public AppDbContextSeed(AppDbContext dbContext, UserManager<AppUser> userManager,
        RoleManager<AppRole> roleManager)
    {
        _dbContext = dbContext;
    }

    public async Task Seed()
    {
        ...
        await _dbContext.SaveChangesAsync();
    }
}

啟動文件

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<AppDbContextSeed>();
}

程式

public static void Main(string[] args)
{
    var host = BuildWebHost(args);

    using (var scope = host.Services.CreateScope())
    {
        var services = scope.ServiceProvider;

        try
        {
            var appDbContextSeed = services.GetService<AppDbContextSeed>();
            appDbContextSeed.Seed().Wait();
        }
        catch (Exception ex)
        {
            var logger = services.GetService<ILogger<Program>>();
            logger.LogError(ex, "An error occurred while seeding the database");
        }
    }

    host.Run();
}

當我運行add-migrationupdate-database ,沒有appDbContextSeed數據插入數據庫。 我做錯了什么?

您可以將種子執行放在Main方法上,而Main方法僅在應用程序啟動時運行。 如果希望在執行update-database命令的同時執行種子方法,則需要遵循EF Core 2.1中的數據播種新功能。 該功能為實體配置HasData添加了新方法,可讓您添加一些初始數據。

這是“ 數據種子”功能文檔的摘錄:

數據播種允許提供初始數據以填充數據庫。 與EF6中不同,在EF Core中,種子數據與實體類型相關聯,作為模型配置的一部分。 然后,當將數據庫升級到模型的新版本時,EF Core遷移可以自動計算需要應用哪些插入,更新或刪除操作。

我建議您閱讀文檔以了解使用該新功能的知識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM