0

EF を使用した ASP.NET MVC 4 アプリケーションがあり、CodeFirst を使用していません。SQL テーブルを次のようにしたい:

注文 1 ---- 0...1 OrdersWithShipment

CREATE TABLE Orders (
OrderId int NOT NULL IDENTITY(1,1),
OrderDate date NOT NULL,
OrderNo int NOT NULL,
ShipmentId Int NULL
CONSTRAINT [Orders_PK] PRIMARY KEY CLUSTERED 
(
   [OrderId] ASC
))

CREATE TABLE OrdersWithShipment (
ShipmentId int NOT NULL IDENTITY(1,1),
OrderId int NULL,
ShipmentDate date NOT NULL 
CONSTRAINT [OrdersWithShipment_PK] PRIMARY KEY CLUSTERED 
(
[ShipmentId] ASC
))

Q : 1 --- 0...1 の関係を確立するには、(SQL および EF で) 何をする必要がありますか?

編集: 一意のフィルター処理されたインデックスリンクを使用できますか

4

2 に答える 2

2

これは1..0-1、SQL で を定義する方法です (ShipmentId両方のテーブルから削除されます)。

CREATE TABLE Orders (
OrderId int NOT NULL IDENTITY(1,1),
OrderDate date NOT NULL,
OrderNo int NOT NULL,
CONSTRAINT [Orders_PK] PRIMARY KEY CLUSTERED 
  ( [OrderId] ASC )
) ;

CREATE TABLE OrdersWithShipment (
OrderId int NOT NULL,
ShipmentDate date NOT NULL, 
CONSTRAINT [OrdersWithShipment_PK] 
  PRIMARY KEY CLUSTERED 
  ( [OrderId] ASC ),
CONSTRAINT [Orders_OrdersWithShipment_FK] 
  FOREIGN KEY 
    ( [OrderId] )
  REFERENCES [Orders] 
    ( [OrderId] )
) ;
于 2012-08-23T15:08:57.313 に答える
2

EF は一意のキー (主キーを除く) をサポートしていないため、このセットアップでは 1 対 1 の関係を実現できません。1対1の関係が必要な場合は、テーブルとテーブルからOrderId列を削除し、外部キー制約をテーブルに直接配置する必要があります。これにより、 との関係のプリンシパル テーブルである EF の 1 対 1 の関係が構築されます。OrderWithShipmentShipmentIdOrdersShipmentIdOrdersWithShipmentOrdersOrdersWithShipment

于 2012-08-23T14:58:13.863 に答える