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

使用EF Core 6脚手架创建控制器失败问题求助

问题描述

使用EF Core 6与.NET 6,已将模型、DbContext和控制器拆分到同一解决方案的不同项目中,所有项目均安装了相同版本的必要NuGet包。尝试通过「添加MVC控制器(带视图,使用Entity Framework)」脚手架创建控制器时出现错误。即使移除OnModelCreating方法的重写、多次清理NuGet缓存,问题仍未解决。

相关代码如下:

DbContext类

using Microsoft.EntityFrameworkCore;
using WMS.Models;

namespace WMS.DataAccess
{
    public class ApplicationDBContext :DbContext
    {
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<OrderHeader>()
                .HasKey(a => new { a.Order, a.ReleaseNumber });

            modelBuilder.Entity<OrderDetail>()
                .HasKey(b => new { b.Order, b.ReleaseNumber });

            modelBuilder.Entity<OrderDetail>()
                .HasOne(b => b.OrderHeader)
                .WithMany(a => a.OrderDetails)
                .HasForeignKey(b => new { b.Order, b.ReleaseNumber });
        }

        public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options) : base(options)
        {
        }

        public DbSet<OrderHeader> OrderHeaders { get; set; }
        public DbSet<OrderDetail> OrderDetails { get; set; }
        public DbSet<Item> Items { get; set; }
    }
}

Item模型类

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WMS.Models
{
    public class Item
    {
        [Key]
        public string ItemId { get; set; }
        public int Weight   { get; set; }
        public string ItemDescription { get; set; }
    }
}

附错误截图、脚手架设置截图、解决方案资源管理器截图及各项目NuGet包截图。


排查与解决步骤
  1. 校验脚手架工具版本匹配性
    打开包管理器控制台,执行dotnet tool list查看已安装的dotnet-aspnet-codegenerator版本,确保其与.NET 6、EF Core 6版本完全一致。若版本不匹配,执行dotnet tool update -g dotnet-aspnet-codegenerator更新到对应版本。

  2. 检查项目引用与NuGet依赖

    • 确认控制器项目已正确添加模型项目、DbContext项目的引用。
    • 逐一核对所有项目的NuGet包:Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Design、数据库提供商包(如Microsoft.EntityFrameworkCore.SqlServer)、Microsoft.AspNetCore.Mvc相关包必须版本完全统一,无版本冲突。
  3. 验证DbContext的注册与配置

    • 检查启动项目的Program.cs,确认DbContext已正确注册:
      builder.Services.AddDbContext<ApplicationDBContext>(options =>
          options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
      
    • 确认appsettings.json中的连接字符串格式正确、指向目标数据库。
  4. 手动执行脚手架命令
    若VS界面操作失败,尝试用包管理器控制台或dotnet命令手动生成:

    • 包管理器控制台命令示例:
      Scaffold-DbContext "Server=.;Database=你的数据库名;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context ApplicationDBContext -Force
      
    • dotnet命令示例:
      dotnet aspnet-codegenerator controller -name ItemController -m Item -dc ApplicationDBContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries -p 你的DbContext项目路径 -c 你的控制器项目路径
      
  5. 检查复合键模型定义
    确认OrderHeader和OrderDetail模型中的复合键属性(Order、ReleaseNumber)类型一致,且无空值约束冲突。

  6. 清理重建解决方案
    执行Clean Solution,删除所有项目下的bin、obj文件夹,再执行Rebuild Solution,确保无编译错误。

  7. 检查VS环境完整性
    确保使用的Visual Studio 2022已安装最新更新,且ASP.NET和Web开发组件完整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:47:26