2009-10-10 2 views
0

내 코드를 검토하십시오. 모든 Entity에 대해 서비스 클래스를 만들었는데 여기에서이 엔터티에 대한 모든 액세스 메서드를 넣습니다.이 메서드는 엔터티에서 DTO 클래스로의 변환을 수행합니다. 이 메소드는 웹 레이어 또는 bussines 메소드에서 호출됩니다. 내가 이러는거야? 아니면 다르게해야합니까?DTO 엔터티 - 엔터티 프레임 워크

서비스 방법 : 당신은 실제로 당신이 때문에 연기의 (돌아오고있는 IEnumerable을 사용하기 전까지 쿼리가 늘는 실제로 데이터베이스에

public static IEnumerable<OsobaDto> GetNakupyByOsoba(Guid guid) 
    { 
     using (FinanceEntities finance = new FinanceEntities()) 
     { 

      var osoby = from o in finance.OsobaSet 
         where o.Nakupy.Any(n => n.idnakupu == guid) 
         select new OsobaDto 
            { 
             Id = o.idosoba, 
             Meno = o.meno, 
             Priezvisko = o.priezvisko, 
             Prijem = o.prijem, 
             Nakupy = o.Nakupy.Select(n => new NakupDto 
                     { 
                      IdNakupu = n.idnakupu, 
                      Cena = n.cena, 
                      Datum = n.datum 
                     }) 
            }; 



      return osoby; 
     } 
    } 

그리고

public class NakupDto 
{ 
    public Guid? IdNakupu 
    { 
     get; 
     set; 
    } 
    public Decimal Cena 
    { 
     get; 
     set; 
    } 
    public DateTime Datum 
    { 
     get; 
     set; 
    } 

    public IEnumerable<OsobaDto> Osoby 
    { 
     get; 
     set; 
    } 

    public OsobaDto Platil 
    { 
     get; 
     set; 
    } 

답변

0

모든 것이 좋지만 한 가지 제안이 있습니다. DTO 개체가 많은 경우 일반적인 변환기 작성에 대해 생각해보십시오. 반사 및 explicit conversion 운영자를 사용하여 수행 할 수 있습니다.

+0

가능하면 '일반적인 DTO 변환기'클래스를 공유 할 수 있습니까? –

+0

AutoMapper를 사용하면 쉽게 작성할 수 있습니다. http://elegantcode.com/2009/10/06/automapper-introduction-and-samples-from-netdug/을 확인하십시오. – Restuta

0

가 명심 DTO 클래스 실행). 실제로 쿼리를 실행하기 전에 FinanceEntities를 삭제 한 이후로 어떻게 작동하는지 확신 할 수 없습니다. 그것이 작동한다고 가정하면, 그것은 나에게 잘 보입니다.