实体框架数据库首先生成多对多中间表,其中没有额外的列

Posted

技术标签:

【中文标题】实体框架数据库首先生成多对多中间表,其中没有额外的列【英文标题】:Entity Framework DB First generate many to many intermediate table WITHOUT having extra columns in it 【发布时间】:2017-03-16 01:13:57 【问题描述】:

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

换句话说:

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

【问题讨论】:

【参考方案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));

【讨论】:

以上是关于实体框架数据库首先生成多对多中间表,其中没有额外的列的主要内容,如果未能解决你的问题,请参考以下文章

数据库怎么映射生成java实体类

多对多(自相关)特定订单实体框架

JPA 多对多JPQL查询语句怎么写?

首先在实体框架代码中与中间对象进行多对多映射

使用 SQL 和 Linq 的多对多关系(实体框架/实体)

实体框架自引用分层多对多