我正在使用Entity Framework以及默认的ASP.NET Membership服务。我还有一个第三个表格,用于“个人资料信息”。我以为EF会在内部处理所有内容,但事实并非如此。当我尝试通过转到像http://localhost:19506/User/Delete/SomeGUIDhere
这样的URL来删除用户时,我得到了一些与存在外键约束这一事实有关的令人讨厌的错误。
如何管理这些类型的依赖项?不得不追踪它所有这一切都打败了EF的目的所以我猜我错过了一些小事。
编辑包含我正在使用的一些代码。我仍然想知道是否有比下面更好的方法。看起来它很快就会失控,很多外键依赖依赖。
public void DeleteUser(User u)
{
db.Profiles.DeleteObject(u.Profile);
db.aspnet_Membership.DeleteObject(u.aspnet_Membership);
db.Users.DeleteObject(u);
db.SaveChanges();
}
答案 0 :(得分:2)
这些类型的依赖关系如何? 管理?必须跟踪它 所有这些都打败了EF的目的 所以我猜我错过了什么 次要的。
不幸的是,这仍然是一个手动过程,并且正如@Danny Varod所指出的那样两倍:
在您的数据库中,假设已建立外键关系,请确保选中条件“On Delete - > Cascade”。您可以在SQL Server Management Studio中更改此内容。
在EF实体模型中,您还应该在关系上指定此选项。为此,只需选择代表关系的实体之间的虚线。在属性中,您将看到“级联删除”的相应选项 - 您应该为具有 1 的结束选择删除,而不是*。
答案 1 :(得分:1)
对概念模型(和db)的关系进行级联删除。