You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用EntityFrameworkCore执行dotnet run seeddata报错及SwaggerUI无法启动求助

解决PokemonReviewApp的EF种子填充及Swagger启动问题

一、解决Owner表Name列插入NULL的种子填充错误

  1. 检查Seed.cs中的Owner种子数据
    打开Seed.cs,逐一核对所有要插入的Owner实例,确保每个对象都明确赋值了Name属性,没有遗漏或拼写错误(比如误写为Nmae)。示例正确写法:
    var owners = new List<Owner>
    {
        new Owner { Name = "Ash Ketchum", ... },
        new Owner { Name = "Misty", ... }
        // 确保所有Owner都设置了Name
    };
    
  2. 验证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();
      }
      
    如果模型要求必填,种子数据必须严格遵守,不能留空。
  3. 确认迁移与数据库结构一致
    打开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无法启动的问题

  1. 检查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()之前调用,且只在开发环境启用(也可根据需求调整)。
  2. 验证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,手动修改。
  3. 排查端口与访问问题
    • 调试时查看控制台输出的URL,确认端口正确,直接在浏览器访问http://localhost:<端口>/swagger(比如http://localhost:5000/swagger)。
    • 检查端口是否被其他程序占用,可更换applicationUrl中的端口号测试。
    • 确保本地防火墙没有阻止该端口的访问。
  4. 确认启动项目配置
    在Visual Studio中,确认解决方案资源管理器里的启动项目是当前的PokemonReviewApp,没有误选其他项目。

内容的提问来源于stack exchange,提问作者jcthom114

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:49:56