2009-11-23 163 views
0

我想知道人們在處理WCF服務時如何處理實體框架中Enum支持的缺乏?實體框架 - WCF - 枚舉?

通常的做法似乎是將entity屬性中的getter &聲明爲private,然後爲該實體創建一個部分類並在其中聲明enum屬性。

這是一切都很好,但也給WCF服務帶來了問題。我需要客戶端的Enum定義,並希望通過自動代理生成來實現。爲此,我必須將DataMember屬性添加到共享類的Enum屬性中,以便將其包含在序列化過程中。但是,當我現在調用WCF方法時,它將序列化(int)和(Enum)屬性,從而攜帶冗餘數據並增加消息大小。 處理這種情況的最佳方式是什麼,以及其他人如何處理這種情況?

感謝,

湯姆

回答

3

我同意EF對象不應超過WCF發送。通過這樣做,你暴露了太多WCF服務背後的實現細節。

要限制爲了便於從EF對象轉換爲WCF服務公開的DTO/POCO而需要編寫的代碼量,請參閱​​。

+0

ty,對於Automapper的建議+1 – TJF 2009-11-24 16:22:01

0

我們不要過度WCF發送EF對象。

我們將對象映射到DTO(數據傳輸對象)並通過WCF發送它們。

這將EF 4,那裏是POCO(普通老式CLR對象)支持

+0

謝謝,這很有道理。你會繼續在EF 4上使用DTO還是繼續EF 4 POCO實施?我只是在看一些關於它的文章,看它是否會運行良好 – TJF 2009-11-24 16:13:58

0

所以EF 4不支持枚舉...讓我們找到其他解決方案改變了。

假設你有一個OrderStatus枚舉,如果你想遵循嚴格的數據庫設計規則,你應該創建一個OrderStatus表。然後,您可以爲您的「枚舉」表中添加信息,如:

  • 值(int或字符串)
  • 本地化描述

然後你會在您的表的外鍵引用它。 這是一個解決方案。

現在,另一種是帶有複雜類型來代替狀態ID:

http://devtalk.dk/CommentView,guid,d5dccc2a-5723-49b4-97d1-bf759b7f592d.aspx