2017-08-22 1 views
0

私はEFをかなり新しくしているので、これは愚かな質問ではないと思います。私は検索しましたが、私の問題に関しては何も見つかりませんでした。EF6データベース最初の外​​部キーのテーブル当たりの多重度の問題

私はEF6で既存のデータベースをモデリングする際に問題を抱えています。

TPT model モデルを作成する際の問題により、BAMS *環境テーブルを手動で追加する必要があります。 BAMSPortalEnvironmentからBAMSPrimeEnvironmentに外部キーを追加するまではすべて問題ありません。特定のPrime環境では、Portal環境がある場合とない場合がありますが、すべての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'、[PRIMARY]、' – ironstone13

+0

ONこの 'CONSTRAINT UQ_EnvironmentID_EnvironmentType UNIQUE NONCLUSTERED(EnvironmentIdのASC、EnvironementType)のようなものにユニーク制約を適用する場合、私は提案を理解していない助けるん。テーブルには、すでに一意の列に主キーがあります。 AFAIK、EF6はユニーク制約をサポートせず、主キーのみをサポートします。 –

+0

ああ、申し訳ありませんが、これらの列の*両方に*複合* PKがあることに気付かず、 'EnvironmentId'のみであると思っていました。これは非常に奇妙なことですが、両方のテーブルに複合PKがあるので、この関係は明らかに '* 0.1.1'であり、' * 'ではありません。多分、EFはこのようなシナリオをサポートしておらず、すべてのFKを1対多数の暗黙的に扱いますか? – ironstone13

答えて

0

私は解決策を見つけることができなかったので、代わりにBAMSPortalEnvironmentがBAMSPrimeEnvironmentを参照するのは、私はこの問題を解決している、それは代わりに環境を参照するように変更しました。

関連する問題