Используя Entity Framework Core (сначала код), я пытаюсь выбрать данные из существующей таблицы на основе составного ключа.Я не могу изменить определения базы данных.
У одной таблицы есть составной ключ, а у другой таблицы только один столбец в составном ключе.Я думаю, что могу продемонстрировать это, используя Пример внешнего ключа Microsoft , единственное изменение будет то, что 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; }
}