gpt4 book ai didi

c# - ArgumentNullException : Value cannot be null. 参数名称:构造函数

转载 作者:太空狗 更新时间:2023-10-30 00:51:03 27 4
gpt4 key购买 nike

我正在使用 EF 7 构建 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; }
}

章节类:

public class MangaChapter : IChapter<MangaBook>, IHasThumbnail
{
public MangaChapter()
{
PagesPath = new List<Path>();
}

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

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

public string ThumbnailPath { get; set; }

public IList<Path> PagesPath { get; set; }

public int BookID { get; set; }
public MangaBook Book { get; set; }
}
}

和我引入的路径类只是为了在 EF 中存储一个列表

public class Path
{
public Path(string s) { P = s; }

public int ID { get; set; }

public string P { get; set; }

public int MangaChapterID { get; set; }

public MangaChapter MangaChapter { get; set; }

public static implicit operator Path(string s)
{
return new Path(s);
}

public static implicit operator string(Path s)
{ return s.P; }
}

问题是当我尝试以这种方式使用 myDbContext 访问数据库时:

var list = _db.Paths.ToList();

我得到一个异常:ArgumentNullException:值不能为空。 参数名称:构造函数。我尝试过以不同的方式访问它,但总是以该异常告终。

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

最佳答案

Path 对象需要一个默认构造函数:

public Path()
{
}

Entity Framework (很像所有 JSON 序列化器、XML 序列化器和我能想到的其他序列化器)需要在所有 对象上有一个默认构造函数,以便正确地序列化/保存和反序列化/加载它.

这个问题回答得很好:

No parameterless constructor defined for type of 'System.String' during JSON deserialization

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

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

关于c# - ArgumentNullException : Value cannot be null. 参数名称:构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com