2010-10-28 57 views
1

我正在删除基于它的主键的实体,然后我使我的存储库是通用的。这是我目前的删除方法:实体框架4:DeleteObject(实体):我需要先检索这个对象吗?

public void Del(E entity) // where E : EntityObject on the class 
{ if(entity != null) 
     DC.DeleteObject(entity); 
    return; 
} 

它运行在MVC 2 Web应用程序中。因此,用户从实体发送主键值以删除,我创建了一个新实体,然后将其发送到Delete方法。这将提取主键并使用Where()子句删除该项目。首先查询数据库似乎很愚蠢。

+0

你测试了吗?如果它没问题,但使用Where()子句不会添加任何额外的删除项目的顺序,它应该搜索项目。 – 2010-10-28 16:04:40

回答

4

在EF 4上,您不需要查询要删除(或更新)的对象,但需要设置主键并将其附加到上下文。你的方法是这样的:

public void Del(E entity) // where E : EntityObject on the class 
{ 
    if(entity != null) 
    { 
     DC.Attach(entity); 
     DC.DeleteObject(entity); 
     DC.SaveChanges(); 
    } 
} 

编辑:

的DeleteObject的方法可以被称为在已经删除的对象。 http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.deleteobject.aspx

+0

如果实体在我们试图删除它时不存在,它会简单地忽略它吗?假设另一个用户在我们接触之前删除了它?很好回答btw! – 2010-10-28 16:54:12

+0

见编辑..... – Equiso 2010-10-28 17:25:46

+1

请参阅http://blogs.msdn.com/b/alexj/archive/2009/06/19/tip-26-how-to-avoid-database-queries-using-stub- entities.aspx列出了“存根实体”操作 – 2010-10-28 17:30:26

1

您不需要检索它,但是您需要将做为将其附加到上下文(如果您没有)。