2009-10-10 120 views
0

請檢閱我的代碼。對於我的每一個實體,我都創建了一個服務類,在這裏我放置了這個實體的所有訪問方法。這個方法正在從實體到我的DTO類進行轉換。這些方法是從Web層或bussines方法調用的。我在做第三次嗎?或者我應該以不同的方式做?實體到DTO - 實體框架

的服務方法:

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; 
     } 
    } 

而且DTO類

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轉換器'類嗎? – 2011-11-17 12:08:24

+0

它可以使用AutoMapper輕鬆編寫。看看http://elegantcode.com/2009/10/06/automapper-introduction-and-samples-from-netdug/ – Restuta 2011-11-17 22:33:02

0

記住查詢不會居然打在數據庫中,直到你實際使用你正在返回(因爲推遲了IEnumerable執行)。我不確定這是如何工作的,因爲您在實際執行查詢之前正在處理FinanceEntities。假設有效,我看起來很好。