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
ます。