在app start上运行自定义SQL脚本

时间:2016-08-09 13:35:16

标签: c# asp.net-core entity-framework-core

我使用的是ASP.NET Core和Entity Framework Core。我需要首先在应用程序上以编程方式创建一些视图和函数。有没有办法在EF配置时运行一些自定义SQL代码?

3 个答案:

答案 0 :(得分:1)

如果您首先在实体中使用代码,则可以尝试在迁移中执行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

这只会执行一次。

答案 1 :(得分:0)

我自己使用这个课程。这将在数​​据库初始化后仅运行一次代码。

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);

答案 2 :(得分:-1)

你可以在这里使用大量的方法,我个人可以在EF上下文中使用StartUp和Configure方法或静态构造函数。