删除顺序在实体框架中是不可预测的
本文关键字:不可预测 框架 顺序 实体 删除 | 更新日期: 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很繁琐。