我在Entity Framework Code First项目中有以下删除方法:
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&#34 ;.冲突发生在数据库" UserDB",表中 " dbo.Users",column' Group_ID'。声明已经终止。
似乎以反向(随机)顺序调用Remove方法。如果我在db.SaveChanges()
之后添加另一个 RemoveRange()
,它(显然)可以正常工作。
如何强制删除命令?
答案 0 :(得分:2)
你需要教EF表关系。然后它会自动为您订购DML操作。声明模型中的关系。例如,用户类应该具有组属性。
这些属性在查询中也非常有用。没有它们,不确定你是如何做到的。手动编写连接是乏味的。