在应用启动时运行自定义SQL脚本

本文关键字:自定义 SQL 脚本 运行 应用 启动 | 更新日期: 2023-09-27 18:01:34

我正在使用ASP。. NET核心和实体框架核心。我需要创建一些视图和功能编程上的应用程序首先开始。有一种方法来运行一些自定义SQL代码,而EF正在配置?

在应用启动时运行自定义SQL脚本

如果您首先使用实体代码,您可以尝试在迁移中执行sql脚本:

首先您需要创建一个迁移:

Add-Migration RunMySqlScripts

然后在生成的迁移文件中,您可以编写SQL:

// PLAIN SQL
Sql("Your sql code here");
// OR FROM FILE
var sqlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"scripts.sql"); 
Sql(File.ReadAllText(sqlFile));

然后运行:

Update-Database

我自己用这个类。这将在数据库初始化后只运行一次代码。

public class MyDataInitializer
{
    public async Task InitializeDatabaseAsync(IServiceProvider serviceProvider)
    {
        var db = serviceProvider.GetService<MyCustomDB>();
        var databaseCreated = await db.Database.EnsureCreatedAsync();
        if (databaseCreated)
        {
            await GenerateData(db);
        }
    }
    private static async Task GenerateData(MyCustomDB context)
    {
        context.Users.Add(new User
        {
            Name = "admin",
            PasswordParam = "pwd",
        });
        await context.SaveChangesAsync();
        // or execute custom sql here
    }
}

Startup.Configure(IApplicationBuilder app, ...)

结尾
MyDataInitializer dataInitializer = new MyDataInitializer();
await dataInitializer.InitializeDatabaseAsync(app.ApplicationServices);

这里可以使用很多方法,我个人会在EF上下文中使用带有Configure方法或静态构造函数的StartUp