2012-04-02 62 views
1

我們有一個特定的結構稱爲措施,我們希望改爲使用這種類型的數據庫字段類型如的雙。使用投影來填補未映射類型的EF

所以我們有一個實體:

public class MyEnity 
{ 
    public int MyValue { get; set; } 
} 

我們有一個傳輸對象: 公共類MyDto { 公共措施MyMeasureValue {獲得;組; } }

如果屬性類型將匹配,我們就可以填補我們的DTO的每個投影:

enities.Select(i => new MyDto { MyMeasureValue = new Measure(i.MyValue, _unitsService.GetUnit("km")) }); 

但由於EF不支持這樣的言論,我們要補充這一點,或者加載整個實體:

entities.Select(i => new { MyValue = i.MyValue }) 
     .AsEnumerable() 
     .Select(i => new MyDto { MyMeasureValue = new Measure(i.MyValue, _unitsService.GetUnit("km")) }); 

我們想在回填過程中避免多次循環,尤其是因爲有很多屬性需要填充。我們可以通過第一條語句並教EF執行度量創建嗎? (例如攔截等)

PS。創建EF複合類型並映射它不是一種選擇!

感謝Enyra

回答

0

而獲取使用LINQ實體的實體的一些屬性你可以使用複雜類型。例如;

Model1Container container = new Model1Container(); 
var temp = from o in container.MasterSet 
      select new 
        { 
         x = o.LastModifiedBy, 
         y = o.LastModifiedDate 
        }; 

順便說一句,代替手動映射DTOS,最好使用autommaper。它具有映射匹配專有名稱而無需明確聲明的功能。

+0

COMPLEXE類型是沒辦法,因爲我們的類型,並必須有一個結構。 Automapper可能是一個解決方案,我必須澄清這一點。 – Enyra 2012-04-02 11:08:06