2012-04-06 7 views
6

Ist es möglich, eine Eins-zu-eins-Beziehung mit dem Elternschlüssel und einem Diskriminatorwert zuzuordnen? Ich weiß, dass der Code die Diskriminatoreigenschaft der konkreten Klasse zuerst nicht mag und nur in der Map-Methode referenziert.Wie wird der Vererbungsdiskriminator als zusammengesetzter Schlüssel in Entity Framework abgebildet?

FlightTypes { Inbound = 1, Outbound = 2} 

public class Transaction 
- int TransactionId 
- int? InboundFlightId 
- InboundTransactionFlight InboundFlight 
- int? OutboundFlightId 
- OutboundTransactionFlight OutboundFlight 

public abstract class TransactionFlight 
- TransactionFlightId 

public class InboundTransactionFlight : Flight 
- List<Transaction> InboundFor 

public class OutboundTransactionFlight : Flight 
- List<Transaction> OutboundFor 

Entity<InboundTransactionFlight>().Map(m => m.Requires("FlightTypeId").HasValue(1));   
Entity<OutboundTransactionFlight>().Map(m => m.Requires("FlightTypeId").HasValue(2)); 

/* das, was derzeit erzeugt */

CREATE TABLE Transactions (
    TransactionId int NOT NULL, 
    InboundFlightId int NULL, 
    OutboundFlightId int NULL 
) 

CREATE TABLE TransactionFlights (
    TransactionFlightId int NOT NULL, 
    FlightTypeId  int NOT NULL, 
    ... 
    CONSTRAINT PK_TransactionFlights PRIMARY KEY CLUSTERED (TransactionFlightId) 
) 

/* ist es möglich, dies zu generieren/Karte und Erbe behalten? */

CREATE TABLE Transactions (
    TransactionId int NOT NULL, 
) 

CREATE TABLE TransactionFlights (
    TransactionId int NOT NULL, 
    FlightTypeId int NOT NULL, 
    ... 
    CONSTRAINT PK_TransactionFlights PRIMARY KEY CLUSTERED (TransactionId, FlightTypeId) 
) 

Danke.

Antwort

3

Wie ich weiß, ist dies nicht möglich, weil EF es nicht erlaubt, die Diskriminatorspalte in anderen Mappings zu verwenden. Außerdem erfordert Ihre Zielzuordnung, dass Ihre Transaktionsklasse auch die Eigenschaft FlightTypeId hat (Klasse muss Eigenschaften für den gesamten Schlüssel haben), aber es würde die Bedeutung der Vererbung brechen, da Sie den Wert dieser Eigenschaft ändern und Ihre Vererbung inkonsistent machen könnten .

+0

Das ist ein sehr guter Punkt Ladislav und beantwortet sicherlich die Frage für mich. EF hat meine Datenbankdesigngewohnheiten sicherlich in Frage gestellt. Zum besseren glaube ich. –

+0

Sie hätten zwar nur lesen dürfen ... – VdesmedT

Verwandte Themen