나는 일을하는 가장 좋은 방법을 알아 내려고 노력하면서 DataContext의 수명을 조금 공부했다.Linq to SQL - 데이터베이스 요청을 어떻게 관리해야합니까?
웹 응용 프로그램에서 내 DAL을 다시 사용하고자한다면 비즈니스 개체 요청 당 DataContext 접근 방식을 사용하기로 결정했습니다.
제 아이디어는 데이터베이스가 요청 당 별도의 컨텍스트를 만드는 정보를 검색하기 위해 dbml 파일에서 L2S 엔티티를 확장하는 것입니다.
엔터티를 반환 측면에서public partial class AnEntity
{
public IEnumerable<RelatedEntity> GetRelatedEntities()
{
using (var dc = new MyDataContext())
{
return dc.RelatedEntities.Where(r => r.EntityID == this.ID);
}
}
}
는 ... 쿼리에서 반환 나는이 시점에서 포항 강판을 반환해야하거나 단순히 비즈니스 오브젝트를 반환 할 괜찮합니까? 나는 DataContext가 삭제 된 후에 반환 된 엔티티의 속성에 액세스하려고하면 실패 할 것이라고 생각합니다. 그러나 이것이 내가 이러한 유형의 메소드를 구현하기로 결정한 이유입니다.
대신에 : 이론적으로
AnEntity entity = null;
using (var repo = new EntityRepo())
{
entity = repo.GetEntity(12345);
}
var related = entity.RelatedEntities; // this would cause an exception
내가 할 수 있어야한다 :
AnEntity entity = null;
using (var repo = new EntityRepo())
{
entity = repo.GetEntity(12345);
}
var related = entity.GetRelatedEntities();
내 특정 응용 프로그램의 상황을 감안할 때 나는 (Windows 서비스 & 웹 응용 프로그램에서 작업 할 필요가있다) 명백한 결함이 있는지, 그리고 내가 무엇을하려고 노력하고 있는지에 대한 더 나은 접근법이 있는지를 알기를 원합니다.
감사합니다.
피할 수있는 스레드 관련 문제는 무엇입니까? – Nate
이 글에 자세히 설명되어 있습니다. http://www.west-wind.com/weblog/posts/246222.aspx – James
너무 많이 방해 받기를 원하지 않으므로이 글을 원래 게시물에서 삭제했습니다.하지만 기본적으로 웹 응용 프로그램과 같은 다중 스레드 환경에서 내 DAL에 액세스하려는 경우 충돌을 피하려고합니다. – James