경고 : 다음은 작은 테이블에만 적합합니다 (<1000 행).
다음은 SQL이 아닌 엔터티 프레임 워크를 사용하여 행을 삭제하는 솔루션이므로 SQL 엔진 (R / DBM)과 관련이 없습니다.
이것은 테스트 또는 이와 유사한 상황을 위해이 작업을 수행한다고 가정합니다. 어느 한 쪽
- 데이터의 양이 적 거나
- 성능은 중요하지 않습니다
간단히 전화하십시오 :
VotingContext.Votes.RemoveRange(VotingContext.Votes);
이 문맥을 가정하면 :
public class VotingContext : DbContext
{
public DbSet<Vote> Votes{get;set;}
public DbSet<Poll> Polls{get;set;}
public DbSet<Voter> Voters{get;set;}
public DbSet<Candidacy> Candidates{get;set;}
}
단정 한 코드의 경우 다음 확장 방법을 선언 할 수 있습니다.
public static class EntityExtensions
{
public static void Clear<T>(this DbSet<T> dbSet) where T : class
{
dbSet.RemoveRange(dbSet);
}
}
그런 다음 위의 내용이됩니다.
VotingContext.Votes.Clear();
VotingContext.Voters.Clear();
VotingContext.Candidacy.Clear();
VotingContext.Polls.Clear();
await VotingTestContext.SaveChangesAsync();
최근 에이 접근법을 사용하여 각 테스트 사례 실행마다 테스트 데이터베이스를 정리했습니다 (생성 된 삭제 명령의 형태를 확인하지는 않았지만 매번 DB를 처음부터 다시 만드는 것보다 빠릅니다).
왜 느려질 수 있습니까?
- EF는 모든 행을 가져옵니다 (VotingContext.Votes)
- 그런 다음 ID를 사용하여 (정확한 방법은 중요하지 않음) ID를 삭제합니다.
따라서 많은 양의 데이터로 작업하는 경우 EF가 SQL Server와 동일한 방식으로 모든 데이터를 캐시하므로 IIS 서버에 대해 SQL 서버 프로세스 (모든 메모리를 소비 함)를 종료시킵니다. 테이블에 많은 양의 데이터가 포함되어 있으면 이것을 사용하지 마십시오.
TRUNCATE
전문가들이 외래 키 제약에 대해 걱정 하지 않는지 궁금 합니다.