使用两个外键生成表时出错

时间:2013-04-22 12:04:25

标签: entity-framework-5 code-first

我正在尝试使用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; }
}

此表仅用于促进UserSmartCode之间的多对多关系。

这是我的Code表的域类的一部分:

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

CodeRightenum

应用这两个约束:

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

0 个答案:

没有答案