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

添加数据库数据时触发System.ArgumentNullException(entitySet),请求排查

排查System.ArgumentNullException: Value cannot be null. Parameter name: entitySet异常

嘿,我来帮你搞定这个报错!你遇到的System.ArgumentNullException: Value cannot be null. Parameter name: entitySet,大概率是你的DbContext实例或者DbSet没正确初始化导致的,咱们一步步排查:

最可能的原因:DbContext实例未正确初始化

看你控制器里的代码Db.actores.Add(actors);,这里的Db变量如果是未初始化的静态/全局变量,那actores这个DbSet自然就是null,调用Add方法时就会触发这个异常。

修复方案:正确初始化DbContext

修改你的控制器代码,确保在使用DbContext前先实例化它:

public class YourControllerName : Controller
{
    // 声明DbContext实例
    private readonly CinemaDbContext _dbContext;

    // 在构造函数中初始化DbContext
    public YourControllerName()
    {
        _dbContext = new CinemaDbContext();
    }

    public ActionResult Actors()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Actors(Actors actors)
    {
        // 先验证模型数据是否合法(推荐步骤)
        if (ModelState.IsValid)
        {
            _dbContext.actores.Add(actors);
            _dbContext.SaveChanges();
            // 重定向到列表页,避免用户刷新重复提交数据
            return RedirectToAction("ActorsList");
        }
        // 如果模型验证失败,返回原页面并保留用户输入的数据
        return View(actors);
    }
}

其他需要检查的点

1. 确认连接字符串配置正确

你的CinemaDbContext构造函数用了base("DefaultConnection"),要确保配置文件里存在这个连接字符串:

  • 如果是ASP.NET MVC(.NET Framework),检查Web.config:
    <connectionStrings>
        <add name="DefaultConnection" 
             connectionString="Data Source=你的数据库服务器;Initial Catalog=你的数据库名;Integrated Security=True;" 
             providerName="System.Data.SqlClient" />
    </connectionStrings>
    
  • 如果是ASP.NET Core,检查appsettings.json:
    "ConnectionStrings": {
        "DefaultConnection": "Server=你的数据库服务器;Database=你的数据库名;Trusted_Connection=True;"
    }
    

2. 可选:使用依赖注入管理DbContext(推荐)

如果你的项目支持,用依赖注入来管理DbContext的生命周期会更规范,还能避免手动实例化的问题:

  • 在项目启动类(比如Global.asax或Program.cs)注册CinemaDbContext:
    // 以ASP.NET MVC 5为例,用Unity容器
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    
        // 注册DbContext
        var container = new UnityContainer();
        container.RegisterType<CinemaDbContext>(new HierarchicalLifetimeManager());
        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }
    
  • 然后在控制器构造函数中注入:
    public class YourControllerName : Controller
    {
        private readonly CinemaDbContext _dbContext;
    
        // 构造函数注入DbContext
        public YourControllerName(CinemaDbContext dbContext)
        {
            _dbContext = dbContext;
        }
    
        // 后续方法和之前一样...
    }
    

3. 检查DbSet命名(可选优化)

你的DbSet命名是actores,实体类的表名是actors_tb,虽然EF能自动映射,但为了代码可读性,你可以把DbSet的名字改成Actors,这样更符合常规命名习惯:

public class CinemaDbContext:DbContext {
    public CinemaDbContext() : base("DefaultConnection") { }
    public DbSet<Actors> Actors { get; set; } // 这里改成Actors
    public DbSet<Producers> Producer { get; set; }
    public DbSet<movie> movies { get; set; }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:28:43