C# 使用我的类库中的代码运行迁移
我有一个类库,稍后将作为nuget包打包 要使用我的nuget包,我在我的库中的一个名为Injections.cs的文件中有一个方法,您可以将它添加到startup.cs文件中 看起来是这样的:C# 使用我的类库中的代码运行迁移,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我有一个类库,稍后将作为nuget包打包 要使用我的nuget包,我在我的库中的一个名为Injections.cs的文件中有一个方法,您可以将它添加到startup.cs文件中 看起来是这样的: public static class Injections { public static IServiceCollection AddServiceAndRoleSecurity(this IServiceCollection services) { services
public static class Injections
{
public static IServiceCollection AddServiceAndRoleSecurity(this IServiceCollection services)
{
services.AddTransient<ISecurityService, SecurityService>();
services.AddTransient<IDatabaseContextFactory, DatabaseContextFactory>();
services.AddTransient<ISecurityRepository, SecurityRepository>();
services.AddDbContext<IDatabaseContext, DatabaseContext>(options =>
options.UseSqlServer(@""",
x => x.MigrationsAssembly(typeof(DatabaseContext).Assembly.FullName)));
services.AddMemoryCache();
return services;
}
}
但是,对于有Startup.cs文件的问题,通常可以找到这种类型的解决方案,但在我的例子中,我没有任何Startup.cs,因为它是一个类库
那么,我如何从类库运行迁移呢?在单独的应用程序中创建数据库迁移,而不是在具有业务逻辑的应用程序中创建数据库迁移。部署应用程序时,此迁移应用程序可以作为部署管道的一部分运行
我不会在启动应用程序时加载诸如数据库迁移之类的内容。您真的希望库在您的数据库上运行迁移吗?我不确定是否希望看到这种行为?好的,但是其他层调用这个类库,对吗?另一层有一个Startup.cs,对吗?那有什么问题?你为什么不想看到这种行为?
public static IApplicationBuilder CreateDatabase(this IApplicationBuilder app, IServiceScopeFactory scopeFactory)
{
using (var scope = scopeFactory.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<IDatabaseContext>();
var migrations = db.DatabaseAccessor.GetPendingMigrations();
if (migrations.Any())
db.DatabaseAccessor.Migrate();
}
return app;
}