一个零到一个关系ASP.NET MVC

时间:2012-08-23 14:48:28

标签: sql-server entity-framework relationship

我有一个带有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的关系?

编辑: 我可以使用唯一的过滤索引link

2 个答案:

答案 0 :(得分:2)

EF不支持唯一键(主键除外),因此您无法与此设置实现一对一关系。如果您想要一对一的关系,则必须从OrderId表中删除OrderWithShipment列,从ShipmentId表中删除Orders,并将您的外键约束直接放在{{1}上在ShipmentId表中。这将构建EF的一对一关系,其中OrdersWithShipment是与Orders关系的主要表。

答案 1 :(得分:2)

这是在SQL中定义1..0-1的方式(从两个表中删除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] )
) ;