Есть ли способ отобразить это так, чтобы родительские таблицы Airport и Flight отображали только соответствующую часть внешнего составного ключа?
Использование EF4.3 с Code First и Fluid API.
Каждый рейс приземляется в одном или нескольких аэропортах в определенном порядке. Без свойства дополнительного ключа FlightOrder это отображение работает.
Airport
- string Code
- List<AirportFlight> AirportFlights
Flight
- string Number
- List<AirportFlight> AirportFlights
AirportFlight
- string AirportCode
- string FlightNumber
- int FlightOrder
public AirportConfiguration() {
HasKey(x => x.Code);
HasMany(x => x.AirportFlights).WithRequired().HasForeignKey(x => x.AirportCode);
}
public AirportFlightConfiguration() {
HasKey(x => new { x.AirportCode, x.FlightNumber, x.FlightOrder });
}
public FlightConfiguration()
{
HasKey(x => x.Number);
HasMany(x => x.AirportFlights).WithRequired().HasForeignKey(x => x.FlightNumber);
}
Это схема, сгенерированная Entity Framework:
CREATE TABLE Airports(
Code nvarchar(128) NOT NULL,
AirportFlight_AirportCode nvarchar(128) NULL, -- *** DO NOT WANT THIS ***
AirportFlight_FlightNumber nvarchar(128) NULL, -- *** DO NOT WANT THIS ***
AirportFlight_FlightOrder int NULL, -- *** DO NOT WANT THIS ***
CREATE TABLE Flights(
Number nvarchar(128) NOT NULL,
AirportFlight_AirportCode nvarchar(128) NULL, -- *** DO NOT WANT THIS ***
AirportFlight_FlightNumber nvarchar(128) NULL, -- *** DO NOT WANT THIS ***
AirportFlight_FlightOrder int NULL, -- *** DO NOT WANT THIS ***
CREATE TABLE AirportFlights(
AirportCode nvarchar(128) NOT NULL,
FlightNumber nvarchar(128) NOT NULL,
FlightOrder int NOT NULL,
CreatedDate datetime NOT NULL,
RowVersion varbinary(max) NULL,
CONSTRAINT PK_AirportFlights PRIMARY KEY CLUSTERED
(
AirportCode ASC,
FlightNumber ASC,
FlightOrder ASC
)
ALTER TABLE AirportFlights WITH CHECK ADD CONSTRAINT FK_AirportFlights_Airports_AirportCode FOREIGN KEY(AirportCode)
REFERENCES Airports (Code)
ALTER TABLE AirportFlights WITH CHECK ADD CONSTRAINT FK_AirportFlights_Flights_FlightNumber FOREIGN KEY(FlightNumber)
REFERENCES Flights (Number)
-- *** DO NOT WANT THIS ***
ALTER TABLE Airports WITH CHECK ADD CONSTRAINT FK_Airports_AirportFlights_AirportFlight_AirportCode_AirportFlight_FlightNumber_AirportFlight_FlightOrder FOREIGN KEY(AirportFlight_AirportCode, AirportFlight_FlightNumber, AirportFlight_FlightOrder)
REFERENCES AirportFlights (AirportCode, FlightNumber, FlightOrder)
-- *** DO NOT WANT THIS ***
ALTER TABLE Flights WITH CHECK ADD CONSTRAINT FK_Flights_AirportFlights_AirportFlight_AirportCode_AirportFlight_FlightNumber_AirportFlight_FlightOrder FOREIGN KEY(AirportFlight_AirportCode, AirportFlight_FlightNumber, AirportFlight_FlightOrder)
REFERENCES AirportFlights (AirportCode, FlightNumber, FlightOrder)
Спасибо.
Исправлено:
Эти объекты были в объекте AirportFlights
- List<Airport> Airports
- List<Flight> Flights