我正在使用Entity Framework Core(代码优先),试图基于复合键从现有表中选择数据。我无法更改数据库定义。
一个表具有组合键,另一个表仅具有组合键中的列之一。我想我可以使用Microsoft Foreign Key Example进行演示,唯一的变化是CarState
在RecordOfSale
上不存在(或变成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; }
}