删除顺序在实体框架中是不可预测的

本文关键字:不可预测 框架 顺序 实体 删除 | 更新日期: 2023-09-27 18:15:12

我在实体框架代码第一项目中有以下删除方法:

var selectedID = selectedGroup.ID;
var users = (from user in db.Users
               where user.Group_ID == selectedID
               select user);
db.Users.RemoveRange(users);
db.Groups.Attach(selectedGroup);
db.Groups.Remove(selectedGroup);
db.SaveChanges();

这些是模型:

 public class Group
  {
    [Key]
    public Guid ID { get; set; }
    [Required]
    public Guid Branch { get; set; }
  }
  public class User
  {
    [Key]
    public Guid ID { get; set; }
    [Required]
    public Guid Group_ID { get; set; }
  }

当调用db.SaveChanges()时,我得到一个异常:

DELETE语句与REFERENCE约束冲突"FK_Users_Groups"。冲突发生在数据库UserDB表中"dbo。Users",列"Group_ID"。语句已被终止。

似乎Remove方法是以反向(随机)顺序调用的。如果我在RemoveRange()之后添加另一个 db.SaveChanges(),它(显然)工作正常。

如何强制删除顺序?

删除顺序在实体框架中是不可预测的

你需要教EF表的关系。然后,它将自动为您排序DML操作。声明模型中的关系。例如,user类应该有一个group属性。

这些属性在查询中也非常有用。真不知道没有他们你是怎么做到的。手工写join很繁琐。