fer*_*bet 17 asp.net-core asp.net-core-6.0 .net-6.0
在.Net 5中,我们可以通过将DataContext传递给Configure方法来调用迁移,并在启动类中调用迁移。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, DataContext dataContext)
{
// migrate any database changes on startup (includes initial db creation)
dataContext.Database.Migrate();
...
}
Run Code Online (Sandbox Code Playgroud)
我们如何在.Net 6 中做到这一点?
Pan*_*vos 41
简洁版本
听起来真正的问题是将过去的代码放在哪里Startup.Configure。
正在Program.cs使用
using (var scope = app.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<SomeDbContext>();
db.Database.Migrate();
}
Run Code Online (Sandbox Code Playgroud)
解释比较长
EF Core 迁移文档中的在运行时应用迁移部分显示,就 EF Core 而言,没有任何变化。
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<SomeDbContext>();
//Same as the question
db.Database.Migrate();
}
host.Run();
}
Run Code Online (Sandbox Code Playgroud)
听起来真正的问题是将过去的代码放在哪里Startup.Configure。该代码可以放置在Main方法中,或者如果使用最小 API,则可以放置在Program.cs. Configuration、Services等Environment可用作WebApplicationBuilder类或由它创建的WebApplication中的属性。WebApplicationBuilder包含 DI、配置、日志记录和主机的构建器接口,例如WebApplicationBuilder.Services公开IServiceCollection。
WebApplication属性公开由配置的中间件WebApplicationBuilder,例如WebApplication.Services公开IServiceProvider
最小 API 中的启动替换
中的方法Startup.cs已合并到Program.cs.NET 6中。Startup.cs包含两种方法:
IServiceCollection。IConfigurationBuilder这包括以前在Startup.ConfigureServices.Startup.Configure.在 .NET 6 中,接口移至 WebApplicationBuilder 和 WebApplication 类。.NET Core 无需调用“神奇”的 Startup 类并注入接口,而是Program.cs可以直接访问其所需的接口。
如果您不需要配置服务,您只需 3 行即可创建一个最小的 API 应用程序:
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run();
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您至少需要配置 DbContext,因此您需要单独使用WebApplicationBuilder和WebApplication。这将在下一节中显示
最小 API 中的迁移
在基本的最小 API 中Program.cs:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Run Code Online (Sandbox Code Playgroud)
WebApplication一旦通过其属性创建实例,就可以创建 DbContext Services:
var builder = WebApplication.CreateBuilder(args);
//Register the DbContexts etc.
...
builder.Services.AddDbContext<SomeDbContext>(....);
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<SomeDbContext>();
db.Database.Migrate();
}
app.MapGet("/", () => "Hello World!");
app.Run();
Run Code Online (Sandbox Code Playgroud)
当然,最好对此类代码使用单独的方法或类,保持Program.cs干净:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<SomeDbContext>(....);
var app = builder.Build();
ApplyMigrations(app);
app.MapGet("/", () => "Hello World!");
app.Run();
static void ApplyMigrations(WebApplication app)
{
using var scope = app.Services.CreateScope();
var db = scope.ServiceProvider.GetRequiredService<SomeDbContext>();
db.Database.Migrate();
}
Run Code Online (Sandbox Code Playgroud)
甚至 :
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<SomeDbContext>(....);
var app = builder.Build();
app.ApplyMigrations()
.UseCustomLogging()
.DoSomeOtherConfiguration()
...;
app.MapGet("/", () => "Hello World!");
app.Run();
Run Code Online (Sandbox Code Playgroud)
在单独的类中使用ApplyMigrations扩展方法:
public static class DataExtensions
{
public static WebApplication ApplyMigrations(this WebApplication app)
{
using var scope = app.Services.CreateScope()
var db = scope.ServiceProvider.GetRequiredService<SomeDbContext>();
db.Database.Migrate();
return app;
}
}
Run Code Online (Sandbox Code Playgroud)
Ren*_*ena 10
在 ASP.NET Core 6 中,它应该是:
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<YourDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("YourConnectionString")));
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<YourDbContext>();
db.Database.Migrate();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17172 次 |
| 最近记录: |