我知道这个问题之前曾多次被问过,但我有一个奇怪的行为在我身边,我无法得到任何解决方案。
我正在使用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,并且主要工作的解决方案是从实体中删除虚拟关键字(非虚拟属性)。
在我的例子中,我想在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>();
}
}