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