我对EF很新,所以我希望这不是一个愚蠢的问题。我搜索了,但找不到与我的问题相关的任何内容。EF6数据库第一个每种类型的外键多重性问题
我一直在建模EF6中的现有数据库的问题。我有TPT继承设置如下:
TPT model 我必须手动添加BAMS *环境表,因为创建模型的问题。一切都很好,直到我将BAMSPortalEnvironment中的外键添加到BAMSPrimeEnvironment。对于给定的Prime环境,可能有也可能不是Portal环境,但对于每个门户环境,都有一个Prime环境。
我从VS2017出现以下错误:
运行转换:多重不是在关系中的作用“BAMSPortalEnvironment“FK_BAMSPortalEnvironment_BAMSPrimeEnvironment”有效。因为依赖角色属性不是关键属性,所以依赖角色的多重性的上界必须是*。相关表格的
简化模型:
CREATE TABLE dbo.Environment(
EnvironmentId int IDENTITY(1,1) NOT NULL,
EnvironmentTypeId char(1) NOT NULL,
[Description] varchar(64) NOT NULL,
CONSTRAINT UQ_Environment UNIQUE NONCLUSTERED (EnvironmentId ASC) ON [PRIMARY],
CONSTRAINT PK_Environment PRIMARY KEY CLUSTERED (EnvironmentId ASC, EnvironmentTypeId ASC) ON [PRIMARY]
) ON [PRIMARY];
CREATE TABLE dbo.BAMSPrimeEnvironment(
EnvironmentId int NOT NULL,
EnvironmentTypeId AS CAST('B' AS char(1)) PERSISTED NOT NULL,
CONSTRAINT FK_BAMSPrimeEnvironment_Environment FOREIGN KEY (EnvironmentId, EnvironmentTypeId) REFERENCES dbo.Environment (EnvironmentId, EnvironmentTypeId) ON UPDATE NO ACTION ON DELETE CASCADE,
CONSTRAINT PK_BAMSPrimeEnvironment PRIMARY KEY CLUSTERED (EnvironmentId ASC, EnvironmentTypeId ASC) ON [PRIMARY]
) ON [PRIMARY];
CREATE TABLE dbo.BAMSPortalEnvironment(
EnvironmentId int NOT NULL,
EnvironmentTypeId AS CAST('P' AS char(1)) PERSISTED NOT NULL,
BAMSPrimeId int NOT NULL,
BAMSPrimeTypeId AS CAST('B' AS char(1)) PERSISTED NOT NULL,
CONSTRAINT FK_BAMSPortalEnvironment_BAMSPrimeEnvironment FOREIGN KEY (BAMSPrimeId, BAMSPrimeTypeId) REFERENCES dbo.BAMSPrimeEnvironment (EnvironmentId, EnvironmentTypeId) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT FK_BAMSPortalEnvironment_Environment FOREIGN KEY (EnvironmentId, EnvironmentTypeId) REFERENCES dbo.Environment (EnvironmentId, EnvironmentTypeId) ON UPDATE NO ACTION ON DELETE CASCADE,
CONSTRAINT UQ_BAMSPortalEnvironment_BAMSPrimeId_BAMSPrimeTypeId UNIQUE NONCLUSTERED (BAMSPrimeId ASC, BAMSPrimeTypeId ASC) ON [PRIMARY],
CONSTRAINT PK_BAMSPortalEnvironment PRIMARY KEY CLUSTERED (EnvironmentId ASC, EnvironmentTypeId ASC) ON [PRIMARY]
) ON [PRIMARY];
我可以“解决”这个改变“0..1”,以“*”,但这并不能准确地描述我的模型。我错过了什么让这个工作?
这是我的第一篇文章,所以如果你需要更多的信息,请告诉我。
谢谢!
它是否帮助,如果你在'BAMSPrimeEnvironment',像应用唯一约束这个 '约束UQ_EnvironmentID_EnvironmentType唯一聚集(EnvironmentId ASC,EnvironementType)ON [PRIMARY],' – ironstone13
我不明白的建议。该表已在这些列上具有主键,这是唯一的。 AFAIK,EF6不支持唯一的约束,只有主键。 –
哦,对不起,我没有注意到你已经在*这两列中有* * * *组合,我认为它只在'EnvironmentId'上。这很奇怪,在两张表中你都有复合PK,所以这种关系显然是'0..1'而不是'*'。也许EF不支持这样的情况,并且将每个FK都视为一对多隐含的对手? – ironstone13