2010-10-28 137 views
1

我正在研究一個項目,我們需要從WCF服務中獲取數據。服務代碼通過實體框架查找數據庫。然而,爲了防止通過網絡將EF生成的類發送到客戶端生成的代理中,我們決定將EF類中的值映射到定製的DTO類,其中映射器類負責從EF生成的值中挑選出值並將它們放入DTO類。然後,我們使用這些DTO類來獲取服務方法的請求和響應。 EF根據彼此相關的表構建類。我得到不同的類,但看起來像這些如下屬性:瞭解實體框架類

public global::System.Data.Objects.DataClasses.EntityCollection<SubAttachment> Attachments 
    {} 

public global::System.Data.Objects.DataClasses.EntityReference<Gl> GlCodeReference 
    {} 

少數有附加到他們,我猜關鍵字參考提供了一些方法的屬性爲EF來查​​找相關的表上領域。

如果我不想發送重EF課程,是否有比這種映射方法更好/不同的方法?如果沒有,是否有一些參考資料可以幫助我理解實體框架是如何構建這些類的。

感謝您的時間

回答

1

當您在EF創建類,它們對各自領域的[DataMember]屬性,就是這樣得到的發送防空火炮的唯一數據電線。因此,它不像看起來那麼沉重......

但是,由於您正在通過WCF傳遞,因此應該生成實體以進行自我跟蹤,因此,當他們返回到服務時,您知道發生了什麼變化並且不必從db中重新獲取每個實體進行比較。

如果你仍然想要DTO的話,你也可以生成它們。如果你使用的是EF4.0,你可以選擇提取T4文件(.tt),實際上代碼生成 - 使用該文件並進行修改以滿足您的需求並生成DTO以及映射程序類別...

要從edmx獲取.tt文件(僅適用於EF4):右鍵單擊您的模型,選擇添加代碼生成項目,然後選擇EntityObject生成器,如果要通過wcf傳輸對象,請選擇另一個。這將創建一個tt文件,您可以通過發出保存命令來運行該文件(如果要允許它運行,您將得到一個提示)。保存後,它將生成一個文件,該文件與EntityObject生成器的情況下由edmx模型生成的文件完全相同,或者如果使用其他生成器,則會生成兩個.tt文件...