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

:我需要做什么(在 SQL 和 EF 中)才能建立 1 --- 0...1 关系?

编辑:我可以使用唯一的过滤索引链接吗

4

2 回答 2

2

EF 不支持唯一键(主键除外),因此您不会通过此设置实现一对一的关系。如果你想要一对一的关系,你必须从表和表中删除列,OrderId并将你的外键约束直接放在表中。这将为 EF 建立一对一的关系,其中是与 的关系的主表。OrderWithShipmentShipmentIdOrdersShipmentIdOrdersWithShipmentOrdersOrdersWithShipment

于 2012-08-23T14:58:13.863 回答
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 回答