在应用启动时运行自定义SQL脚本
本文关键字:自定义 SQL 脚本 运行 应用 启动 | 更新日期: 2023-09-27 18:01:34
我正在使用ASP。. NET核心和实体框架核心。我需要创建一些视图和功能编程上的应用程序首先开始。有一种方法来运行一些自定义SQL代码,而EF正在配置?
如果您首先使用实体代码,您可以尝试在迁移中执行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