我首先在项目中使用实体代码。基本上我有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约束。
你能帮我吗?
更新
它的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 .....
长期以来,Sql Server一直无法处理多个级联路径并无法对同一表进行级联删除。只是Google错误消息。基本上,如果要使用级联删除,则必须确保只有单个级联路径。
目前,您有两个来自Branchs-> UsersBranchs和Branchs-> Users-> UsersBranchs的路径。
EF默认情况下会设置级联删除,但是可以通过删除DbContext中的约定来停止它。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Manually set cascade delete behaviour
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
base.OnModelCreating(modelBuilder);
}
然后,您必须在要级联删除的任何关系上设置WillCascadeOnDelete(true)。请参阅实体框架文档。
除此之外,您的模型似乎有些奇怪。您看起来好像试图建立一个多对多链接/联接表UsersBranchs,但是在Branchs上也只有一个User并没有任何意义。在这种情况下,您甚至需要UsersBranchs表吗?您是否意味着在分支机构上拥有一组用户,即导航属性而不是外键,从而提供了一对多关系分支->用户?
顺便说一句,我真的不喜欢对单个实体使用复数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句