2009-11-23 100 views
11

我读到新的实体框架将包括一个方法来删除多个项目(Linq到SQL有DeleteAllOnSubmit()),但我找不到函数/方法来做到这一点。实体框架4多个对象删除(RemoveAll)

这是在测试版2还是我必须做我自己的?

UPDATE:

这是我现在使用什么:

public void DeleteObjects(IEnumerable<object> objects) 
    { 
     foreach (object o in objects) 
     { 
      DeleteObject(o); 
     } 
     SaveChanges(); 
    } 
+1

[批量删除在LINQ to Entities]可能的重复(http://stackoverflow.com/questions/869209/bulk-deleting-in-linq-to-entities) – 2012-01-15 23:30:38

回答

8

EF 4可以让你对一个对象上下文中执行TSQL语句:

using (var context = new EntityFrameworkExampleEntities()) 
    {  
    var count = 
     context.ExecuteStoreCommand(@"DELETE FROM Companies WHERE [CompanyID]=4");    
    } 

请参见下面的博客了解详情。

http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework-4.aspx

+0

有没有我的功能缺点? – Omar 2009-11-29 22:57:33

+2

缺点是在移除过程中,所有对象都会保留在内存中。如果您想删除尚未从数据库加载的大量对象,则它们将在删除之前全部加载到应用程序中。 – 2010-10-22 11:26:37

+1

Ick。要引用您链接到的文章,“只有在实体框架不支持 某些您需要的情况下才应使用此功能 ”。 EF支持删除多个对象,调用DeleteObject()和SaveChanges()(或者执行http://stackoverflow.com/a/870081/24267)。 – mhenry1384 2012-10-08 21:03:28

0

我知道这是晚了,但我发现这个职位,并发现了一个简单的解决方案,这是不贴。 您可以在关联属性中将OnDelete设置为Cascade。在VS2012中打开edmx文件。点击关联,你会在Properties选项卡中找到OnDelete。然后,您可以使用Remove()方法而不使用触发器或任何其他特殊处理。