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 메서드를 알고 있습니다. 많은 객체가 삭제되고 있으므로 몇 가지 최적화가 있어야합니다. 그래도 잘 모르겠습니다.
