Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制LazyLoading子集合(首先是实体框架代码)_C#_Entity Framework_Ef Code First_Lazy Loading - Fatal编程技术网

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
之间建立简单的关系,因为中间有一个额外的表格,为了简洁起见,我没有包括在内