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

如何解决System.ArgumentNullException: entity参数为空错误

解决System.ArgumentNullException: 'Value cannot be null. Parameter name: entity'错误

嘿,别慌,这个错误就是个小的变量名混淆问题,很好解决!

你看,在Main方法里,你明明创建了一个新的Category实例,但给它起名叫blog:

var blog = new Category { Name = name };

可紧接着调用db.Categories.Add(category);时,你用的是类里定义的静态category属性——这个属性你只声明了但从来没赋值,它的值一直是null,EF尝试添加一个空对象,自然就抛出空引用异常啦!

两种修正方案:

  1. 直接把添加的对象改成你刚创建的blog:
db.Categories.Add(blog);
  1. 更推荐的方式:把变量名改成category,保持命名一致,代码可读性更高:
var category = new Category { Name = name };
db.Categories.Add(category);

另外,那个类级别的静态属性public static Category category { get; private set; }对你当前的逻辑完全没用,还容易造成混淆,建议直接删掉它。

修正后的完整代码参考:

namespace CodeFirstFinal {
    class Program {
        static void Main(string[] args) {
            using (var db = new CategoryContext()) {
                Console.Write("Enter a name for a new Error category:");
                var name = Console.ReadLine();
                var category = new Category { Name = name };
                db.Categories.Add(category);
                db.SaveChanges();
                var query = from c in db.Categories orderby c.Name select c;
                foreach (var item in query) {
                    Console.WriteLine(item.Name);
                }
            }
        }
    }
    public class Category {
        public int? CategoryId { get; set; }
        public string Name { get; set; }
        public string Url { get; set; }
        public virtual List<Error> Errors { get; set; }
    }
    public class Error {
        public int? ErrorId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public int? CategoryId { get; set; }
        public virtual Category Category { get; set; }
    }
    public class User {
        [Key]
        public string Username { get; set; }
        public string DisplayName { get; set; }
    }
    public class CategoryContext : DbContext {
        public DbSet<Category> Categories { get; set; }
        public DbSet<Error> Errors { get; set; }
        public DbSet<User> Users { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder) {
            modelBuilder.Entity<User>()
                .Property(u => u.DisplayName)
                .HasColumnName("display_area");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:06:44