我正在尝试使用现有数据库作为起点来配置EF Core 6中实体之间的关系。当表之间的联接不在主键列之间时,我遇到了问题。我自动搭建了C#类,因此可能由于命名列重命名和映射而导致问题,而我不确定自己到底在哪里迷路了。
例如,我正在定义员工与其进行的旅程之间的关系。 SQL Server中的相关表/列如下所示:
trips
trip_id (PK)
trip_employee_id
...
employees
employee_key (PK)
valid_date
invalid_date
employee_id
...
要注意的一件事是,employee_id实际上不是员工内部的唯一标识符,但是employee_id + invalid_date = NULL的组合才是。因此,假设我们需要有关员工的最新信息,以下查询将是它们之间的联接:
SELECT *
FROM dbo.trips t
INNER JOIN dbo.employees e
ON t.trip_employee_id = e.employee_id
AND e.invalid_date = NULL
我正在尽可能多地使用DataAnnotations,因此我的C#类如下所示:
namespace Models
{
[Table("trips")]
public partial class Trip
{
[Column("trip_id")]
[Key]
public int TripId { get; set; }
[Column("trip_employee_id")]
public string TripEmployeeId { get; set; }
// Other columns below
}
[Table("employees")]
public partial class Employee
{
[Column("employee_key")]
[Key]
public int EmployeeKey { get; set; }
[Column("valid_date", TypeName = "datetime")]
public DateTime ValidDate { get; set; }
[Column("invalid_date", TypeName = "datetime")]
public DateTime? InvalidDate { get; set; }
[Column("employee_id")]
public string EmployeeId { get; set; }
// Other columns below
}
}
是否有办法在EF Core中使用或不使用DataAnnotations?而且也不需要对invalid_date进行自动过滤,这只是一个很好的选择,因为我假设我可以配置从旅行到员工的1-Many关系,然后仅对invalid_date = NULL的员工进行过滤。
主要问题是,当主体或从属实体都未链接到PK时,是否可以配置关系。