使用EntityFrameworkCore执行dotnet run seeddata报错及SwaggerUI无法启动求助
解决PokemonReviewApp的EF种子填充及Swagger启动问题
一、解决Owner表Name列插入NULL的种子填充错误
- 检查Seed.cs中的Owner种子数据
打开Seed.cs,逐一核对所有要插入的Owner实例,确保每个对象都明确赋值了Name属性,没有遗漏或拼写错误(比如误写为Nmae)。示例正确写法:var owners = new List<Owner> { new Owner { Name = "Ash Ketchum", ... }, new Owner { Name = "Misty", ... } // 确保所有Owner都设置了Name }; - 验证Owner模型的必填配置
查看Owner.cs模型类,确认Name字段带有[Required]特性,或者在DbContext的OnModelCreating方法中通过Fluent API设置了IsRequired():- 特性方式:
public class Owner { public int Id { get; set; } [Required] public string Name { get; set; } // 其他属性 } - Fluent API方式:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Owner>() .Property(o => o.Name) .IsRequired(); }
- 特性方式:
- 确认迁移与数据库结构一致
打开Migrations/InitialCreate.cs,检查Owner表的Name列定义,确认是nullable: false:
如果这里是migrationBuilder.CreateTable( name: "Owners", columns: table => new { Id = table.Column<int>(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column<string>(type: "nvarchar(max)", nullable: false), // 其他列 } );nullable: true但模型要求必填,需要重新生成迁移(先删除现有迁移文件和数据库,再执行Add-Migration InitialCreate和Update-Database)。
二、解决SwaggerUI无法启动的问题
- 检查Program.cs中的Swagger配置
在.NET 8中,确保已正确添加Swagger服务并启用中间件,代码位置要正确:
注意var builder = WebApplication.CreateBuilder(args); // 添加Swagger服务 builder.Services.AddSwaggerGen(); var app = builder.Build(); // 开发环境启用Swagger if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();UseSwagger()和UseSwaggerUI()必须在UseAuthorization()之前调用,且只在开发环境启用(也可根据需求调整)。 - 验证launchSettings.json配置
打开Properties/launchSettings.json,检查launchUrl是否设置为swagger:
如果"profiles": { "http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", "applicationUrl": "http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } }launchBrowser为false,改为true;如果launchUrl不是swagger,手动修改。 - 排查端口与访问问题
- 调试时查看控制台输出的URL,确认端口正确,直接在浏览器访问
http://localhost:<端口>/swagger(比如http://localhost:5000/swagger)。 - 检查端口是否被其他程序占用,可更换
applicationUrl中的端口号测试。 - 确保本地防火墙没有阻止该端口的访问。
- 调试时查看控制台输出的URL,确认端口正确,直接在浏览器访问
- 确认启动项目配置
在Visual Studio中,确认解决方案资源管理器里的启动项目是当前的PokemonReviewApp,没有误选其他项目。
内容的提问来源于stack exchange,提问作者jcthom114
相关产品推荐
相关产品推荐

