[c#] LINQ to Entities에서 대량 삭제

LINQ 또는 LINQ-to-Entities에서 지정된 쿼리와 일치하는 여러 개체를 대량으로 삭제할 수있는 방법이 있습니까? 내가 찾을 수있는 유일한 참조는 구식이며 제거하려는 모든 개체를 반복하고 수동으로 삭제하는 것은 어리석은 것 같습니다.



답변

질문은 오래된 것입니다 (EF5가 존재하기 전). EF5를 사용하는 모든 사람을 위해 EntityFramework.Extended 는이 작업을 순식간에 수행합니다.


답변

얼마 전에 Entity Framework에서 대량 업데이트 (하나의 명령 사용)를 다루는 4 부로 구성된 블로그 시리즈 ( 1 부 , 2 부 , 3 부4 부 )를 작성했습니다.

이 시리즈의 초점은 업데이트 였지만 삭제를 위해 관련된 원칙을 확실히 사용할 수 있습니다.

따라서 다음과 같이 작성할 수 있어야합니다.

var query = from c in ctx.Customers
            where c.SalesPerson.Email == "..."
            select c;

query.Delete();

해야 할 일은 Delete () 확장 메서드를 구현하는 것뿐입니다. 방법에 대한 힌트는 포스트 시리즈를 참조하십시오.

도움이 되었기를 바랍니다


답변

    using (var context = new DatabaseEntities())
    {
        // delete existing records
        context.ExecuteStoreCommand("DELETE FROM YOURTABLE WHERE CustomerID = {0}", customerId);
    }


답변

내가 여기서보고있는 답변은 Linq to Sql입니다.

DeleteAllOnSubmit은 System.Data.Linq의 일부이며 Linq to Sql 인 ITable입니다.

Entity Framework에서는이 작업을 수행 할 수 없습니다.

아직 해결책이 없지만 할 때 다시 게시하겠습니다.


답변

EF6를 사용하고 삭제를 위해 행 SQL 쿼리를 실행하려는 경우 :

using (var context = new DatabaseEntities())
{
    // delete existing records
    context.Database.ExecuteSqlCommand("DELETE FROM YOURTABLE WHERE CustomerID = @id", idParameter);
}


답변

RemoveRange는 EF6에서 도입되었으며 개체 목록을 제거 할 수 있습니다. 아주 쉽습니다.

var origins= (from po in db.PermitOrigins where po.PermitID == thisPermit.PermitID select po).ToList();
db.PermitOrigins.RemoveRange(origins);
db.SaveChanges();


답변

쿼리의 모든 레코드를 삭제하는 데이터 컨텍스트 의 DeleteAllOnSubmit 메서드를 알고 있습니다. 많은 객체가 삭제되고 있으므로 몇 가지 최적화가 있어야합니다. 그래도 잘 모르겠습니다.