는 다음의 예를 보자언제 DataContext를 처리 할 수 있습니까?
는MyDataContext context = new MyDataContext(); // DB connection established.
MyTableRecord myEntity = myDataContext.Table.FindEntity(12345); // retrieve entity
내 법인 내가
foreach (var record in MyEntity.RelatedTable)
Linq가 SQL 실행 지연을 사용한다는 것을 이해합니다. 따라서 엔티티를 처음 검색 할 때 지연된 실행 만 사용하는지 또는 관련된 테이블 레코드에도 액세스 할 때이 명령을 사용하는지 궁금합니다.
예
var userRepo = new UserRepository(); // creates new DataContext
var auditRepo = new AuditRepository(); // creates new DataContext
var activeUsers = userRepo.FindActiveUsers();
foreach (var user in activeUsers)
{
// do something with the user
var audit = new Audit();
audit.Date = DateTime.Now;
audit.UserID = user.ID;
auditRepo.Insert(audit);
}
내의 repo에 내 삽입 방법은 SubmitChanges
를 호출합니다. 위의 내용이 수용 가능한지, 아니면 연결의 낭비입니까? 현실적으로해야 할 일 :
var userRepo = new UserRepository();
var activeUsers = userRepo.FindActiveUsers();
foreach (var user in activeUsers)
{
// do something with user
var audit = new Audit();
audit.Date = DateTime.Now;
audit.UserID = user.ID;
user.Audits.Add(audit);
userRepo.Save();
}
이미 열려있는 DataContext를 다시 사용 하시겠습니까? 상위 수준의 datacontext를 열고 낮은 수준의 처리를해야하는 상황에서 userRepo를 전달해야합니까? 아니면 별도의 리포지토리를 만들어야합니까?
repos를 사용할 때 using 문을 사용하는 것이 항상 좋은가? 내가 사용하고있는 커스텀 리포지터리를 만들었는데 때로는 문장을 사용하여 모든 코드를 래핑하는 것이 좋지 않은 것 같습니다. – James
당신은 당신 만 작업하는 커스텀 코드를 가지고 있다는 것을 의미합니다. Dispose 호출을 생략하고 앞으로도 수행하지 않을 경우 필요한 것보다 오랜 시간 동안 자원을 보유 할 수 있습니까? 그런 다음 상황에 따라 사용하지 않는 것이 좋습니다.그러나 일반적으로 IDisposable을 구현하는 모든 객체에서 using을 호출하는 것이 좋습니다. 그렇지 않으면 가비지 컬렉터가 범위를 벗어나는 정리되지 않은 객체를 정리합니다. 그러나 가비지 수집기가 언제 실행되는지 언제 알지 못합니다. –
네, 좋은 지적입니다. 고마워요. – James