实体框架-视图的右联接
本文关键字:视图 框架 实体 | 更新日期: 2023-09-27 18:26:41
我的数据库上下文中有两个实体:
员工
员工假期权利
我认为这是一种相当正常的一对一关系,但员工可以在没有员工假期权利的情况下存在,但员工假期权利在没有员工的情况下不可能存在
员工被映射到我的数据库中的视图
EmployeeHolidayEntitment是一个表
我的课程是:
员工假期权利
[Table("tblEmployeeHolidayEntitlement")]
public class EmployeeHolidayEntitlement
{
[Key]
public int EmployeeNumber { get; set; }
public virtual Employee Employee { get; set; }
public decimal StandardEntitlement { get; set; }
//.....omitted for brevity
}
员工
[Table("vEmployee")] //note v - it's a view
public class Employee
{
[Key]
public int EmployeeNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
在构建上下文时,我会:
(不确定这是否正确!)
modelBuilder.Entity<EmployeeHolidayEntitlement>()
.HasRequired(w => w.Employee)
.WithOptional();
在查询时,如果可能的话,我希望每个员工都有一条EmployeeEntitment记录(无论它是否存在于tblEmployeyHolidayEntitment中)-
我的查询当前如下:
from
userEntitlement in db.ADUserHolidayEntitlement
join
adUser in db.ADUsers
on
userEntitlment.EmployeeNumber equals adUser.EmployeeNumber
select userEntitlement
但这(我认为)是在加入左翼-它只返回tblEmployeeHolidayEntitlement 中有条目的2个实体
我想得到的SQL需要看起来像:
SELECT
employee.EmployeeNumber,
employeeHol.*
FROM tblEmployeeHolidayEntitlement employeeHol
RIGHT JOIN vEmployee employee
ON
employeeHol.EmployeeNumber = employee.EmployeeNumber
这可能吗?
您的代码正在进行内部联接。我相信您要求检索所有员工,并为每个员工检索一个EmployeeHolidayEntitlement
(如果存在的话)。
要执行左联接,请使用类似以下的查询:
from adUser in db.ADUsers
join userEntitlement in db.ADUserHolidayEntitlement on
adUser.EmployeeNumber equals userEntitlment.EmployeeNumber into g
from userEntitlement in g.DefaultIfEmpty()
select new
{
adUser,
userEntitlement // Will be null of no entitlement exists
}
它按照您的要求进行内部联接。
您根本不需要显式联接。
你需要这样的东西:
from user in db.....
select new{user,user.Entitlement};