在我的模型中,我有三个表Storage
,Haul
和StoragePlace
。一个存储可以 成为一个地点或运输。对于StoragePlace
,我已经实现了1:0..1关系。问题是Haul
实体。
CREATE TABLE dbo.Haul
(
ID INT NOT NULL PRIMARY KEY IDENTITY,
ID_Storage INT NOT NULL UNIQUE,
Arrival DATETIME NOT NULL DEFAULT getdate(),
Depature DATETIME NULL,
CONSTRAINT FK_Haul_to_Storage FOREIGN KEY (ID_Storage) REFERENCES Storage(ID) ON DELETE CASCADE
)
GO
/** --- See edit below --
CREATE UNIQUE NONCLUSTERED INDEX UQX_Storage
ON Haul(ID_Storage)
WHERE ID_Storage IS NOT NULL;
GO
**/
--------------------------------------------------
CREATE TABLE dbo.Storage
(
ID INT NOT NULL PRIMARY KEY IDENTITY,
Description1 NVARCHAR(100) NULL,
Description2 NVARCHAR(100) NULL,
AddedBy NVARCHAR(50) NOT NULL
)
--------------------------------------------------
CREATE TABLE dbo.StoragePlace
(
ID INT NOT NULL PRIMARY KEY,
ID_PlantArea INT NOT NULL,
CONSTRAINT FK_StoragePlace_to_Storage FOREIGN KEY (ID) REFERENCES Storage(ID) ON DELETE CASCADE,
CONSTRAINT FK_StoragePlace_to_PlantArea FOREIGN KEY (ID_PlantArea) REFERENCES PlantArea(ID) ON DELETE CASCADE
)
我的想法是,UQX_Storage
将触发EF6接受Haul
和Storage
之间的1:0..1关系。当然,这是行不通的。它仍然坚持1:*的关系,根据我的理解,上述模型不可能实现这种关系。
如何在Haul
和Storage
之间建立预期的1:0..1关系?
编辑:
我刚刚意识到ID_Storage
字段永远不会是NULL
,所以我用简单的UQX_Storage
代替了ID_Storage INT NOT NULL UNIQUE,
“ constraint”。但是,那也不能解决问题。