4

EF5 Code First を使用してデータベースを生成しようとしています。これは、SmartCodeRightsテーブルのドメイン クラスです。

public class SmartCodeRight
{
    [Key, Column(Order = 1)]
    public long UserId { get; set; }
    public virtual User User { get; set; }

    [Key, Column(Order = 2)]
    public long CodeId { get; set; }
    public virtual SmartCode Code { get; set; }

    public CodeRight CodeRight { get; set; }
}

このテーブルは、 と の間の多対多の関係を容易にするために作成されたものUserですSmartCode

Codeそして、これは私のテーブルのドメイン クラスの一部です。

public class Code
{
    // ...
    [ForeignKey("User")]
    public long? UserId{get; set;}
    public Virtual User User{get; set;}
    // ...
} 

CodeRightですenum

この 2 つの制約を適用すると、次のようになります。

ALTER TABLE [dbo].[SmartCodeRights] 
ADD CONSTRAINT [FK_dbo.SmartCodeRights_dbo.Users_UserId] 
FOREIGN KEY ([UserId]) 
REFERENCES [dbo].[Users] ([UserId]) 
ON DELETE CASCADE

ALTER TABLE [dbo].[SmartCodeRights] 
ADD CONSTRAINT [FK_dbo.SmartCodeRights_dbo.SmartCodes_CodeId] 
FOREIGN KEY ([CodeId]) 
REFERENCES [dbo].[SmartCodes] ([CodeId]) 
ON DELETE CASCADE

次のエラーが発生します。

System.Data.SqlClient.SqlException (0x80131904):FK_dbo.SmartCodeRights_dbo.SmartCodes_CodeIdテーブルに FOREIGN KEY 制約を導入SmartCodeRightsすると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。制約を作成できませんでした。以前のエラーを参照してください。

私は何を間違っていますか?これを達成する正しい方法は何ですか? 優先的に使用しCodeFirst Data Annotationsます。

4

0 に答える 0