根据Entity Framework Core中的部分组合键选择数据

时间:2019-05-12 15:39:50

标签: c# entity-framework-core

我正在使用Entity Framework Core(代码优先),试图基于复合键从现有表中选择数据。我无法更改数据库定义。

一个表具有组合键,另一个表仅具有组合键中的列之一。我想我可以使用Microsoft Foreign Key Example进行演示,唯一的变化是CarStateRecordOfSale上不存在(或变成NotMapped)。

问题是,使用Entity Framework Core 2.2,如何基于部分键而不是完整的组合键进行选择(如果可能的话)。我尝试使用常量值,虚拟列,计算属性。现有的使用SQL的数据库代码在谓词中为缺少的列定义了一个常量值(但取决于选择哪个常量值运行哪个SQL查询,该值不会保存在表/字段中),例如

WHERE CarState = 'OHIO'

希望如此,Microsoft示例如下:

class MyContext : DbContext
{
    public DbSet<Car> Cars { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Car>()
            .HasKey(c => new { c.State, c.LicensePlate });

        modelBuilder.Entity<RecordOfSale>()
            .HasOne(s => s.Car)
            .WithMany(c => c.SaleHistory)
            .HasForeignKey(s => new { s.CarState, s.CarLicensePlate });
    }
}

public class Car
{
    public string State { get; set; }
    public string LicensePlate { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }

    public List<RecordOfSale> SaleHistory { get; set; }
}

public class RecordOfSale
{
    public int RecordOfSaleId { get; set; }
    public DateTime DateSold { get; set; }
    public decimal Price { get; set; }

    public string CarState { get; set; }
    public string CarLicensePlate { get; set; }
    public Car Car { get; set; }
}

0 个答案:

没有答案