我有一个带有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
答案 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] )
) ;