我正在尝试使用 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。
应用这两个约束:
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.