7

親キーと識別子の値を使用して1対1の関係をマッピングすることは可能ですか?私は、コードが最初に具象クラスのdiscriminatorプロパティを嫌い、Mapメソッドでのみそれを参照することを知っています。

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));

/ *これは現在生成されているものです* /

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 )
)

/ *これを生成/マッピングして継承を維持することは可能ですか?* /

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 )
)

ありがとう。

4

1 に答える 1

3

私が知っているように、EFは他のマッピングで識別子列を使用することを許可していないため、それは不可能です。また、ターゲットマッピングでは、トランザクションクラスにもFlightTypeIdプロパティが必要です(クラスにはキー全体のプロパティが必要です)が、そのプロパティの値を変更して継承を不整合にする可能性があるため、継承の意味が壊れます。

于 2012-04-06T08:19:19.293 に答える