Entity Framework 펼친
정의
EntityFramework.Extended 는 Entity Framework 성능을 향상시키고 필수 기능을 제한을 극복하는 라이브러리입니다.
중요 : 이 라이브러리는 2015 년 이후 더 이상 지원되지 않습니다. Entity Framework Plus 로의 이동을 적극 권장합니다.
풍모
- 일괄 업데이트 및 삭제
- 향후 검색어
- 쿼리 결과 캐시
- 감사 로그
일괄 업데이트 및 삭제
Entity Framework의 현재 제한 사항은 먼저 엔터티를 메모리로 가져온 엔터티를 업데이트하거나 삭제하는 것입니다. 이제 대부분의 시나리오에서 이것은 괜찮습니다. 그러나 성능이 저하되는 몇 가지 시나리오가 있습니다. 또한 단일 h 제의 경우, 데이터베이스로 두 x의 호출을 요구하여 h 제할 수 있으려면 오브젝트를 검색해야합니다. 일괄 업데이트 및 삭제를 사용하면 항목을 수정하기 전에 검색하고로드 할 필요가 없습니다.
삭제 중
//delete all users where FirstName matches
context.Users
.Where(u => u.FirstName == "firstname")
.Delete();
최신 정보
//update all tasks with status of 1 to status of 2
context.Tasks
.Where(t => t.StatusId == 1)
.Update(t => new Task { StatusId = 2 });
//example of using an IQueryable as the filter for the update
var users = context.Users.Where(u => u.FirstName == "firstname");
context.Users.Update(users, u => new User {FirstName = "newfirstname"});
향후 검색어
미래의 쿼리는 다음 확장 메소드로 생성됩니다 ...
- 미래()
- FutureFirstOrDefault ()
- FutureCount ()
// build up queries
var q1 = db.Users
.Where(t => t.EmailAddress == "one@test.com")
.Future();
var q2 = db.Tasks
.Where(t => t.Summary == "Test")
.Future();
// this triggers the loading of all the future queries
var users = q1.ToList();
쿼리 결과 캐시
쿼리 결과를 캐시하려면 FromCache 확장 메서드를 사용합니다. 다음은 샘플 캐싱 쿼리 결과입니다. 평소처럼 LINQ 쿼리를 작성한 다음 FromCache 확장을 추가하십시오.
//query is cached using the default settings
var tasks = db.Tasks
.Where(t => t.CompleteDate == null)
.FromCache();
//query result is now cached 300 seconds
var tasks = db.Tasks
.Where(t => t.AssignedId == myUserId && t.CompleteDate == null)
.FromCache(CachePolicy.WithDurationExpiration(TimeSpan.FromSeconds(300)));
감사 로그
감사 로그 기능은 데이터베이스에 제출 될 때마다 엔티티에 대한 변경 사항을 캡처합니다.
- 감사 로그는 변경된 엔티티 만 캡처하고 변경된 엔티티의 등록 정보 만 캡처합니다.
- 전후 값이 기록됩니다.
- AuditLogger.LastAudit은이 정보가 저장되는 곳이며 ToXml () 메서드가있어 쉽게 저장하기 위해 AuditLog를 XML로 쉽게 바꿀 수 있습니다.
AuditLog는 엔티티의 속성 또는 Fluent Configuration API를 통해 사용자 정의 할 수 있습니다.
유창한 구성
// config audit when your application is starting up...
var auditConfiguration = AuditConfiguration.Default;
auditConfiguration.IncludeRelationships = true;
auditConfiguration.LoadRelationships = true;
auditConfiguration.DefaultAuditable = true;
// customize the audit for Task entity
auditConfiguration.IsAuditable<Task>()
.NotAudited(t => t.TaskExtended)
.FormatWith(t => t.Status, v => FormatStatus(v));
// set the display member when status is a foreign key
auditConfiguration.IsAuditable<Status>()
.DisplayMember(t => t.Name);
감사 로그 작성
var db = new TrackerContext();
var audit = db.BeginAudit();
// make some updates ...
db.SaveChanges();
var log = audit.LastLog;
요구 사항
엔터티 프레임 워크 버전
- Entity Framework 6.x
- 엔터티 프레임 워크 5