为什么在设置 DetailNumber 时,Detail 的两个参数化构造函数都会抛出 Null Reference 错误?
Why do both of the Parameterized Constructors for Detail throw Null Reference errors when setting the DetailNumber?
我有代码优先模型。我试图从构造函数中获取一个细节以自动设置它自己的细节编号。这是我到目前为止的位置:
public class Header
{
public Header()
{
Details = new List<Detail>();
}
[Key]
public Guid Id { get; set; }
[Required]
public Guid CustomerId { get; set; }
[ForeignKey("CustomerId")]
public virtual Customer Customer { get; set; }
public DateTime OrderDate { get; set; }
public ICollection<Detail> Details { get; set; }
}
这里是详细信息:
public class Detail
{
public Detail(Guid id) : base()
{
HeaderId = id;
}
public Detail(Header header) : base()
{
Header = header;
}
private Detail()
{
DetailNumber = (Header.Details.Count) + 1;
}
[Key]
public Guid Id { get; set; }
[Required]
public Guid HeaderId { get; set; }
[ForeignKey("HeaderId")]
public virtual Header Header { get; set; }
public int DetailNumber { get; set; }
[Required]
public Guid ItemId { get; set; }
[ForeignKey("ItemId")]
public virtual InventoryItem Item { get; set; }
}
为什么在设置 DetailNumber 时,Detail 的两个参数化构造函数都抛出 Null Reference 错误?
有了这个构造函数
public Detail(Guid id) : base()
{
HeaderId = id;
}
您的 Header 为空,因为它从未被初始化。我认为在第二个 :base()
参数化构造函数初始化之前执行 Header.
您可以稍微重新安排您的构造函数,以便在未传入构造函数时始终创建 Header
。
public Detail() : this(Guid.NewGuid())
{
}
public Detail(Guid id) : this(new Header())
{
HeaderId = id;
}
public Detail(Header header)
{
Header = header;
DetailNumber = (Header.Details.Count) + 1;
}
我有代码优先模型。我试图从构造函数中获取一个细节以自动设置它自己的细节编号。这是我到目前为止的位置:
public class Header
{
public Header()
{
Details = new List<Detail>();
}
[Key]
public Guid Id { get; set; }
[Required]
public Guid CustomerId { get; set; }
[ForeignKey("CustomerId")]
public virtual Customer Customer { get; set; }
public DateTime OrderDate { get; set; }
public ICollection<Detail> Details { get; set; }
}
这里是详细信息:
public class Detail
{
public Detail(Guid id) : base()
{
HeaderId = id;
}
public Detail(Header header) : base()
{
Header = header;
}
private Detail()
{
DetailNumber = (Header.Details.Count) + 1;
}
[Key]
public Guid Id { get; set; }
[Required]
public Guid HeaderId { get; set; }
[ForeignKey("HeaderId")]
public virtual Header Header { get; set; }
public int DetailNumber { get; set; }
[Required]
public Guid ItemId { get; set; }
[ForeignKey("ItemId")]
public virtual InventoryItem Item { get; set; }
}
为什么在设置 DetailNumber 时,Detail 的两个参数化构造函数都抛出 Null Reference 错误?
有了这个构造函数
public Detail(Guid id) : base()
{
HeaderId = id;
}
您的 Header 为空,因为它从未被初始化。我认为在第二个 :base()
参数化构造函数初始化之前执行 Header.
您可以稍微重新安排您的构造函数,以便在未传入构造函数时始终创建 Header
。
public Detail() : this(Guid.NewGuid())
{
}
public Detail(Guid id) : this(new Header())
{
HeaderId = id;
}
public Detail(Header header)
{
Header = header;
DetailNumber = (Header.Details.Count) + 1;
}