容器化.NET Api中Database.Migrate()无法创建迁移的问题
问题:Docker-Compose下.NET Web API的EF Core迁移不生效及手动迁移连接失败
我正在学习Docker、容器及.NET技术,通过docker-compose启动了两个容器:SQL Server数据库容器和.NET Web API容器。已配置数据库自动迁移,但修改实体后迁移并未生成。尝试手动执行update-database命令时,由于Visual Studio启动docker-compose需将Users.Api设为启动项,而设置该启动项后数据库容器未运行,导致操作无法连接数据库。
docker-compose代码片段
usersdb: container_name: usersdb restart: always user: root environment: SA_PASSWORD: aCertainPassword ACCEPT_EULA: Y ports: - "1433:1433" volumes: - users_data:/var/opt/mssql/data users.api: container_name: users.api environment: - ASPNETCORE_ENVIRONMENT=Development depends_on: - usersdb ports: - "8300:80"
项目结构
- 解决方案包含多项目结构,核心项目包括:
Users.Api:Web API主项目Users.Infrastructure:包含EF Core上下文(UsersContext)及扩展方法的类库- 其他辅助类库项目
Program.cs代码
using Microsoft.EntityFrameworkCore; using Users.Infrastructure.Extensions; using Users.Infrastucture.Contexts; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddAutoMapper(); builder.Services.AddRepositories(); builder.Services.AddDbContext<UsersContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Default"))); builder.Services.AddDatabaseDeveloperPageExceptionFilter(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } using (var scope = app.Services.CreateScope()) { var dataContext = scope.ServiceProvider.GetRequiredService<UsersContext>(); dataContext.Database.Migrate(); } app.UseAuthorization(); app.MapControllers(); app.Run();
内容的提问来源于stack exchange,提问作者rardav
相关产品推荐
相关产品推荐

