2017-08-22 32 views
0

我对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”,以“*”,但这并不能准确地描述我的模型。我错过了什么让这个工作?

这是我的第一篇文章,所以如果你需要更多的信息,请告诉我。

谢谢!

+0

它是否帮助,如果你在'BAMSPrimeEnvironment',像应用唯一约束这个 '约束UQ_EnvironmentID_EnvironmentType唯一聚集(EnvironmentId ASC,EnvironementType)ON [PRIMARY],' – ironstone13

+0

我不明白的建议。该表已在这些列上具有主键,这是唯一的。 AFAIK,EF6不支持唯一的约束,只有主键。 –

+0

哦,对不起,我没有注意到你已经在*这两列中有* * * *组合,我认为它只在'EnvironmentId'上。这很奇怪,在两张表中你都有复合PK,所以这种关系显然是'0..1'而不是'*'。也许EF不支持这样的情况,并且将每个FK都视为一对多隐含的对手? – ironstone13

回答

0

我找不到解决方案,因此而不是BAMSPortalEnvironment引用BAMSPrimeEnvironment,而是将其更改为引用Environment,以解决此问题。