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