C# ArgumentNullException:值不能为null。参数名称:构造函数
我正在使用EF7构建一个ASP.NET 5 MVC应用程序。 我有三种型号: 图书类: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
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()
{
}