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

Nes*_*tor 5 c# entity-framework

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

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();
Run Code Online (Sandbox Code Playgroud)

这些是模型:

 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; }

  }
Run Code Online (Sandbox Code Playgroud)

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

DELETE 语句与 REFERENCE 约束“FK_Users_Groups”冲突。冲突发生在数据库“UserDB”、表“dbo.Users”、“Group_ID”列中。该语句已终止。

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

如何强制删除顺序?

usr*_*usr 4

您需要向 EF 传授表关系。然后它会自动为您排序 DML 操作。声明模型中的关系。例如,用户类应该有一个组属性。

这些属性在查询中也非常有用。不知道没有他们你是如何做到的。手动编写连接非常乏味。