实体框架DB首先生成多对多的中间表,而不包含额外的列

时间:2017-03-16 01:13:58

标签: c# vb.net entity-framework

我很清楚,如果我有多对多的关系而不是中间表中的外键列,那么EF将仅为主表生成实体,在每个表中放置虚拟集合来表示关系。当我有包含额外列的多对多关系时,EF将为中间表生成一个实体,以便访问这些额外的列。我需要知道是否有一种方法可以生成中间表实体而不需要在表中添加任何额外的列。

换句话说:

我们假设我们有以下关系:学校 - 学生 - 学生。 如果我知道学校,我应该如何在没有中间表的情况下让所有不在该学校学习的学生。 (在目标模型中只有目前在学校学习的学生的集合)。 我在整个画面中缺少什么?

1 个答案:

答案 0 :(得分:1)

我认为,当且仅当多对多关系是双方的全面参与时,EF将保留两个表格。

在这种情况下, SQL:

Select *
From Students
Where StudentId Not IN( Select StudentId
                        From   Schools                    
                        Where  schoolId = x)   

或lambda

var SchoolsRequested = Schools.Where(x=>x.schoolId = x);
var notWantedStudentIds = SchoolsRequested.Select(x=>x.StudentId).ToList();
Students.Where(x=> !notWantedStudents.Contains(x));