EF6 数据库优先 Table-外键的每类型多重性问题
EF6 Database First Table-per-Type multiplicity issue on foreign key
我对 EF 还很陌生,所以我希望这不是一个愚蠢的问题。我进行了搜索,但找不到与我的问题相关的任何内容。
我在 EF6 中对现有数据库建模时遇到问题。我的 TPT 继承设置如下:
TPT model
由于创建模型时出现问题,我必须手动添加 BAMS*Environment 表。一切都很好,直到我将外键从 BAMSPortalEnvironment 添加到 BAMSPrimeEnvironment。对于给定的 Prime 环境,可能有也可能没有 Portal 环境,但对于每个 Portal 环境,都有 Prime 环境。
我从 VS2017 收到以下错误:
Running transformation: Multiplicity is not valid in Role 'BAMSPortalEnvironment' in relationship 'FK_BAMSPortalEnvironment_BAMSPrimeEnvironment'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be *.
相关表格的简化模型:
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”更改为“*”来"fix",但这并不能准确描述我的模型。我缺少什么才能使它正常工作?
这是我的第一个 post,所以如果您需要更多信息,请告诉我。
谢谢!
我找不到解决方案,所以我没有将 BAMSPortalEnvironment 引用 BAMSPrimeEnvironment,而是改为引用 Environment,这解决了这个问题。
我对 EF 还很陌生,所以我希望这不是一个愚蠢的问题。我进行了搜索,但找不到与我的问题相关的任何内容。
我在 EF6 中对现有数据库建模时遇到问题。我的 TPT 继承设置如下:
TPT model
由于创建模型时出现问题,我必须手动添加 BAMS*Environment 表。一切都很好,直到我将外键从 BAMSPortalEnvironment 添加到 BAMSPrimeEnvironment。对于给定的 Prime 环境,可能有也可能没有 Portal 环境,但对于每个 Portal 环境,都有 Prime 环境。
我从 VS2017 收到以下错误:
Running transformation: Multiplicity is not valid in Role 'BAMSPortalEnvironment' in relationship 'FK_BAMSPortalEnvironment_BAMSPrimeEnvironment'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be *.
相关表格的简化模型:
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”更改为“*”来"fix",但这并不能准确描述我的模型。我缺少什么才能使它正常工作?
这是我的第一个 post,所以如果您需要更多信息,请告诉我。
谢谢!
我找不到解决方案,所以我没有将 BAMSPortalEnvironment 引用 BAMSPrimeEnvironment,而是改为引用 Environment,这解决了这个问题。