2013-11-15 4 views
3

나는 다음과 같은 층이있는 WPF 응용 프로그램을 만드는거야에서 DbContext를 호출해야합니다 : -> BLL -엔티티 프레임 워크는 내가 BLL 또는 DAL

UI (조회수 + ViewModels를)> DAL

모두 도메인 모델 계층을 참조하십시오.

현재 모든 DB 호출을 UI에서 BLL을 통해 DAL로 전달하고 있습니다. 하지만이 방법이 정확한지 확신 할 수 없습니다.

는 BLL에서 대부분의 메소드는 다음과 같습니다 :)

public ICollection<User> GetUsers() 
{ 
    using (var context = new DbContext()) 
    { 
     return context.Users.ToList(); 
    } 
} 

1 BLL에서 전화로를 전달하는이 방법을 :

public ICollection<User> GetUsers() 
{ 
    return dbAccess.GetUsers(); 
} 

어떤 차례로 DAL에서 유사한 메서드를 호출 DAL은 꽤 중복 된 것처럼 보입니다. 물론 약간의 비즈니스 로직을 보유하고있는 BLL 메소드가 있습니다. 나는 BLL을 그냥 버려야 할까?

2)이 접근법의 또 다른 문제점은 DbContext가 생성되어 DAL에 배치되므로 지연로드를 사용할 수 없다는 것입니다. ViewModel에 DbContext를 작성하여이 문제를 해결할 수 있다고 생각하지만 언제 처리해야합니까?

3) 마지막으로 지연로드를 사용하지 않으므로 관련된 엔티티를로드해야합니다. 그러나 모든 뷰가 동일한 관련 엔티티를 필요로하지 않으므로 동일한 엔티티를 반환하지만 여러 포함이 포함 된 여러 가지 메소드로 끝나는 경우가 많습니다. 괜찮아?

X) 모든 DB 메서드는 DbAccess라는 단일 대규모 클래스에 있습니다. 각 ViewModel (또는 각 엔티티)에 대해 DB 서비스 클래스를 만드는 것이 더 좋을까요?

답변

1

은 BL에서 직접 EF 방법을 호출 할 수 있지만 BL을 EF에 너무 가깝게 연결합니다. 별도의 DAL을 작성하여 EF에 액세스하면 BL을 건드리지 않고 전체 DAL을 바꿀 수 있습니다. BL에서 직접 EF를 호출하는 것은 불가능합니다.

는 또한

public static class ObjectContextPerHttpRequest 
{ 
    public static MyEntities Context 
    { 
     get 
     { 
      string objectContextKey = HttpContext.Current.GetHashCode().ToString("ObjectContextPerHttpRequest"); 

      if (!HttpContext.Current.Items.Contains(objectContextKey)) 
      { 
       HttpContext.Current.Items.Add(objectContextKey, new DomainModel.MyEntities()); 
      } 

      return HttpContext.Current.Items[objectContextKey] as MyEntities; 
     } 
    } 
} 
+0

BLL과 DAL 사이의 디커플링은 확실히 장점 그래서 아래처럼 모든 HttpRequest에 대한 DbContext를 사용할 수 있습니다. HttpRequest에서 SilverLight와 관련이 있는지 확실하지 않은가요? WPF의 ViewModel에 해당합니까? – msp1982dk

+0

오, 죄송합니다. WPF였습니다. MVC라고 가정했을뿐입니다. WPF와 EF가 함께 작동하는 방식에 대해 많이 알지 못합니다. –