我首先为我的项目使用实体代码 . 基本上我有3个类 Users
, Branchs
和 UsersBranchs
.
Users
包含 UserID
, Name
,...
Branchs
包含 BranchID
, Location
,...和UserID,它是指分支的创建者和 UsersBranchs
只有两列BranchID和UserID,它定义哪个用户在哪个分支
问题是我得到这个错误:
'UsersBranchs'表上的'FK_dbo.UsersBranchs_dbo.Users_UsersID'可能会导致循环或多个级联路径 . 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束 .
你能帮我吗?
Update
这是UsersBranchs类
[ForeignKey("UserID")]
public CoreUsers User { get; set; }
public Guid UsersID { get; set; }
[ForeignKey("BranchID")]
public Branchs Branch { get; set; }
public Guid BranchID { get; set; }
并且还将此行添加到DbContext类,以使用UserID和BranchID作为键
modelBuilder.Entity<UsersBranchs>().HasKey(x => new { x.UserID, x.BranchID });
分支类是
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid ID { get; set; }
[ForeignKey("UserID")]
public CoreUsers User { get; set; }
public Guid UserID { get; set; }
public .....
用户类是
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid ID { get; set; }
public .....
2 回答
长时间不能handle multiple cascade paths和cascade delete to same table一直是Sql Server的限制 . 只是谷歌的错误信息 . 基本上,如果你想使用级联删除,那么你必须确保只有一个级联路径 .
目前,您有两个来自Branchs的路径 - > UsersBranchs和Branchs - > Users - > UsersBranchs .
默认情况下,EF会设置级联删除,但可以通过删除DbContext中的约定来停止它 .
然后你必须在你想要级联删除的任何关系上设置WillCascadeOnDelete(true) . 见Entity Framework documentation .
除此之外,你的模型似乎有点奇怪 . 你看起来正在尝试创建一个多对多的链接/连接表UsersBranchs,但你在Branchs上也有一个用户并没有多大意义 . 在这种情况下你甚至需要UsersBranchs表吗?你的意思是在你的分支上有一个用户集合,即导航属性而不是外键,它提供了一对多的关系分支 - >用户?
另外,我真的不喜欢将复数用于单个实体 .
我认为你得到的问题是因为你没有告诉Entity框架它将如何在cascade上删除这些类
在您的DbContext类中,重写OnModelCreating方法并编写此代码
希望对你有帮助