[英]EF 6 codde first - One To Many Mapping - ICollection always null
我知道这个问题以前曾被问过很多次,但我的行为举止很奇怪,无法解决。
我正在使用EF6构建一个.Net应用程序,并首先编写代码。 我将类定义如下(这些是示例类,但结构完全相同):
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int RefId { get; set; }
public int GradeId { get; set; }
public Grade Grade { get; set; }
}
public class Grade
{
private string _name;
public int GradeId { get; set; }
public string GradeName { get; set; }
public ICollection<Student> Students { get; set; }
}
我了解默认情况下,ef 4之后会默认启用惰性加载,而最有效的解决方案是从实体(非虚拟属性)中删除virtual关键字。
就我而言,我想在Grade类的getter方法中设置一些自定义代码,但是ICollection<Student> Students
始终为null。
例如:
public string GradeName
{
get
{
_name = Students.FirstOrDefault(s => s.GradeId == GradeId &&
s.RefId == 2).Name;
if (string.IsNullOrWhiteSpace(_name))
{
_name = Name;
}
return _name;
}
set => _name = value;
}
我尽一切可能,没有任何帮助。 如果您能帮助我解决这个问题,那就太好了,谢谢!
您应该在构造函数中初始化学生,因为这是班级的职责:
public class Grade
{
public int GradeId { get; set; }
public string GradeName { get; set; }
public ICollection<Student> Students { get; set; }
public Grade ()
{
Students = new Collection<Student>();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.