在数据库优先EF Core

时间:2019-02-11 23:03:40

标签: entity-framework asp.net-core

我正在尝试使用现有数据库作为起点来配置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时,是否可以配置关系。

0 个答案:

没有答案