我知道在构造函数中有很多关于虚拟成员调用的问题(在将其标记为重复之前)。我已经明白了,为什么会出现问题。
我还有两个未解答的问题:
实体框架6希望我将外键集合设置为虚拟。
但是,我想在某处初始化它们以防止NullReferenceExceptions
。
关于教程示例:
public class Student
{
public Student() { }
public int StudentId { get; set; }
public string StudentName { get; set; }
public virtual Standard Standard { get; set; }
}
public class Standard
{
public Standard()
{
Students = new List<Student>();
}
public int StandardId { get; set; }
public string Description { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
他们肯定要我在构造函数中初始化虚拟ICollection<Student>
。
我从其他问题中理解的是关于这个主题,这只是关于继承。当我的类没有继承时,这没关系(不好,但还可以)。
(ReSharper建议,让我的课程密封。但是,eeehm,是的,我不能拥有虚拟成员,实体框架想拥有?所以这不是真的有用。)所以现在,我想继续使用构造函数。
关于C#6
我可以用
初始化我的列表public virtual ICollection<Student> Students { get; set; } = new List<Student>();
更新
当初始化运行但虚拟成员调用不会运行时,会运行吗?
public class Standard
{
public Standard()
{
Students = InitializeMyListAndDoSomethingElse();
}
public virtual ICollection<Student> InitializeMyListAndDoSomethingElse()
{
DoSomethingElse();
return new List<Student>();
}
public virtual ICollection<Student> Students { get; set; };
}