C# 控制LazyLoading子集合(首先是实体框架代码)
我们有三个表C# 控制LazyLoading子集合(首先是实体框架代码),c#,entity-framework,ef-code-first,lazy-loading,C#,Entity Framework,Ef Code First,Lazy Loading,我们有三个表教师,学生,学生友好名称教师与学生有一对多的关系,比如: public Teacher { public virtual ICollection<Student> Students { get; set; } } public Student { public int Id { get; set; } public string Name { get; set; } [NotMapped] public string DisplayNa
教师
,学生
,学生友好名称
<代码>教师与学生有一对多的关系,比如:
public Teacher
{
public virtual ICollection<Student> Students { get; set; }
}
public Student
{
public int Id { get; set; }
public string Name { get; set; }
[NotMapped]
public string DisplayName { get; set; }
...
public int TeacherId { get; set; }
public virtual Teacher Teacher { get; set; }
}
public StudentFriendlyNames
{
public string OriginalName { get; set; }
public string FriendlyName { get; set; }
public bool IsActive { get; set; }
}
公共教师
{
公共虚拟ICollection学生{get;set;}
}
公立学生
{
公共int Id{get;set;}
公共字符串名称{get;set;}
[未映射]
公共字符串DisplayName{get;set;}
...
public int TeacherId{get;set;}
公共虚拟教师{get;set;}
}
公立学生友好学校
{
公共字符串原始名称{get;set;}
公共字符串FriendlyName{get;set;}
公共bool IsActive{get;set;}
}
此表包含Students
和StudentFriendlyNames
之间可选的友好名称映射
我要寻找的是每当我执行teacher.Students.First().DisplayName
时,它应该返回IsNULL(studentFriendlyName.FriendlyName,student.OriginalName)
一种可能性是:每当我执行teacher.Students
时,它都会返回与该教师关联的所有学生(EF会自动为您执行此操作)。在这里,EF在填充子实体中起着作用,我希望对其进行控制,以便自动填充DisplayName
。我将使用StudentFriendlyNames
进行连接,SQL等效值如下:
选择std.*,ISNULL(sfn.FriendlyName,std.Name)作为Student std LEFT中的DisplayName,在std.Name=sfn.OriginalName和sfn.IsActive=1上加入StudentFriendlyNames sfn
当然,另一方面,我可以写GetStudents
,做我想做的一切,但我想避免这样做<代码>教师对象被传递到不同的视图(MVC视图)并执行模型。视图中的学生
点击数据库。我不想把老师和相关学生的观点都传给他们
另外,我不能在Students.Name
和StudentFriendlyNames.OriginalName
之间建立简单的关系,因为中间有一个额外的表格,为了简洁起见,我没有包括在内