C# ArgumentNullException:值不能为null。参数名称:构造函数

C# ArgumentNullException:值不能为null。参数名称:构造函数,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我正在使用EF7构建一个ASP.NET 5 MVC应用程序。 我有三种型号: 图书类: public class Book : IBook<MangaChapter>, IHasThumbnail, IBugChecker { public Book() { Chapters = new List<MangaChapter>(); } [Key] public

我正在使用EF7构建一个ASP.NET 5 MVC应用程序。 我有三种型号: 图书类:

public class Book : IBook<MangaChapter>, IHasThumbnail, IBugChecker
    {
        public Book()
        {
            Chapters = new List<MangaChapter>();
        }

        [Key]
        public int ID { get; set; }


        [Required]
        public string Title { get; set; }

        [Required]
        [DataType(DataType.MultilineText)]
        public string Description { get; set; }

        public string ThumbnailPath { get; set; }

        public virtual IList<Chapter> Chapters { get; set; }
}
问题是,当我尝试使用myDbContext访问数据库时,使用以下方式:

var list = _db.Paths.ToList();
我得到一个异常:ArgumentNullException:值不能为null。 参数名称:构造函数。 我尝试过以不同的方式访问它,但总是以那个例外而告终

附言。
应用程序的源代码完全在

上。您需要在
路径
对象上使用默认构造函数:

public Path()
{
}
实体框架(与我能想到的所有JSON序列化程序、XML序列化程序和其他序列化程序非常相似)需要在所有对象上使用默认构造函数,以便正确地序列化/保存和反序列化/加载它

这个问题回答得很好:

基本上,Serailizer/Deserailizer需要创建一个空对象来为其赋值。它无法做出决定使用什么构造函数的复杂决策。是的,可以提出一个参数,它可以通过名称推断哪些属性进入构造函数,但在您的情况下,它甚至不能这样做(它甚至不会尝试这样做,但这超出了我的观点)。构造函数中的参数将被称为
s
,但您没有与
s
匹配的属性。(同样,这不是它会尝试的事情,但如果可以,它将失败。)


基本上,如果您计划执行该类型的任何序列化/反序列化/数据库保存/数据库加载,则需要实现默认构造函数,即使它所做的只是创建一个完全清空的对象。

是_dbnull还是路径null?
路径
没有默认构造函数。添加
public Path(){}
并查看是否修复了它。@EBrown非常感谢您,现在它可以工作了!没问题。我将添加它作为您的答案。构造函数可以是私有的。
var list = _db.Paths.ToList();
public Path()
{
}