如何解决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尝试添加一个空对象,自然就抛出空引用异常啦!
两种修正方案:
- 直接把添加的对象改成你刚创建的
blog:
db.Categories.Add(blog);
- 更推荐的方式:把变量名改成
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
相关产品推荐
相关产品推荐

