我本打算在启动时调用此方法,但它不在任何地方引用:
dbContext.Database.Migrate();
类型
不包含DatabaseFacade
的定义,并且没有 可以找到Migrate
类型的扩展方法Migrate
(您是否缺少 using 指令还是程序集引用?DatabaseFacade
那么我缺少哪个使用/组件?
我需要通过 NuGet 添加以下依赖项。
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
只需在顶部输入以下内容即可导入
EntityFrameworkCore
:
using Microsoft.EntityFrameworkCore;
var migrator = dbContext.Database.GetService<IMigrator>();
await migrator.MigrateAsync("targetMigration", cancellationToken);
(For.Net Core)添加包后(Oracle/SQLServer)
您可以使用扩展来设计startup.cs。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app
.UseSwaggerUI()
.UseRouting()
.UseCors(options => options
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod())
.UseAuthentication()
.UseAuthorization()
.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
})
.ApplyMigrations();
}
因此您可以如下调用ApplyMigrations。
using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
namespace SocialRebate.WebApi.Infrastructure.Extensions
{
public static class ApplicationBuilderExtensions
{
public static IApplicationBuilder UseSwaggerUI(this IApplicationBuilder app)
=> app
.UseSwagger()
.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Your API");
options.RoutePrefix = string.Empty;
});
public static void ApplyMigrations(this IApplicationBuilder app)
{
using var services = app.ApplicationServices.CreateScope();
var dbContext = services.ServiceProvider.GetService<YourDbContext>();
dbContext.Database.Migrate();
}
}
}
我在这个包中找到了它:Microsoft.EntityFrameworkCore.Relational
这是在这里声明的扩展RelationalDatabaseFacadeExtensions
在
DataContext
类的构造函数中,您可以使用
this.Database.Migrate();
它应该做得很好。