如何删除与“用户”关联的所有记录?

问题描述:

我正在使用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(); 
} 

如何管理这些类型的依赖关系为 ?不得不跟踪它 所有类型的失败EF 的目的,所以我猜我缺少的东西 未成年人。

可惜这仍然是一个手动过程,以及双重作为@Danny Varod指出:

  1. 在你的数据库,假设外键关系已经建立,确保了条件“选择删除 - >级联”。您可以在SQL Server Management Studio中更改它。

  2. 在你的EF实体模型中,你也应该在关系上指定这个选项。为此,只需选择表示关系的实体之间的虚线。在属性中,您将看到“级联删除”的适当选项 - 您应该选择具有而不是*的End的删除。

enter image description here

+0

看起来很简单。在你的屏幕截图中,突出显示的部分是否意味着当你删除一篇文章时,其所有相关的评论都会随之发布?在我的问题中,我有1:1的用户:个人资料。当我删除一个用户时,我希望该配置文件也可以使用,但是如果用户没有被删除,我不希望能够意外删除配置文件。 – Pete 2011-03-29 01:51:14

+0

@Pete:是的,你的陈述是正确的 - 实际上检查这个问题 - 假设你在做数据库,首先EF应该从数据库中选择级联删除 - 确保你在那里设置了设置,从你的模型中删除实体,并通过“从数据库更新”重新添加它 - 它应该添加级联删除然后 - 请在您的模型之后再确认。另请查阅这篇文章:http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx – BrokenGlass 2011-03-29 02:29:10

级联删除概念模型(和db)的关系。

+0

如果我知道如何利用级联的删除与我的实体模型和数据库,我也不会张贴的问题。你是否至少有一些伪代码可以重写我的代码,而不必担心依赖关系? – Pete 2011-03-29 01:13:11

+1

我相信你可以改变关系,并将删除类型设置为casacade – 2011-03-29 01:40:23

+0

在edmx设计中,选择关系,在属性toolwindow中,将End1/2在Delete上更改为Cascade。 – 2011-03-29 14:19:42