2012-07-17 12 views
0

傳統實體框架4項目(不是POCO)。EDM結構註釋 - 用於在屬性上提供IgnoreDataMemberAttribute的示例xml配置

默認情況下,所有基本和導航實體屬性均使用DataMemberAttribute進行標記。

我想用IgnoreDataMemberAttribute標記一個實體導航屬性。其目的是當在WCF中使用DataContractSerializer時,當集合中有大量相關實體時,它不會在Web服務中生成非常大的序列化對象。該物業的無障礙似乎並不重要。

我見過有關使用結構註釋和edmx文件的一些文檔herehere。這似乎很適合這個目的。

是否可以使用結構註釋在edmx文件的CSDL中用IgnoreDataMemberAttribute標記實體屬性?

如果是這樣,有人可以提供一個例子嗎?

謝謝!

+0

你並不需要標記它與'IgnoreDataMemberAttribute' - 它只是默認序列化需要的。你只需要移除'DataMemberAttribute',但點是一樣的 - 你需要告訴T4模板不生成屬性。 – 2012-07-17 15:08:14

+0

我寫了[這個答案](http://stackoverflow.com/questions/5912839/how-do-i-use-structural-annotations-to-set-sql-type-to-date-in-model-first-/5924143#5924143)很久以前。它將結構註釋用於不同的目的,但您可以在其中找到一些初始信息,例如定義註釋和訪問T4模板中的註釋。您不需要使用'CopyToSSDL'屬性,因爲您的註釋僅適用於CSDL。 – 2012-07-17 15:11:24

+0

如果要在設計器(而不是XML)中從屬性窗口控制註釋,則還必須爲Visual Studio編寫擴展。 – 2012-07-17 15:11:59

回答

0

這似乎可以通過使用自定義T4模板,儘管此方法刪除所有導航屬性的屬性。

的步驟是:

的EDM設計表面上單擊鼠標右鍵,然後選擇添加代碼生成項目。

  • 選擇ADO.NET EntityObject生成器,並指定要創建的T4模板 TT文件的名稱。

  • 單擊解決方案資源管理器窗口中的EDMX文件,然後在 屬性窗格中清除自定義工具屬性。

  • 單擊解決方案資源管理器窗口中的TT文件,然後在 屬性窗格中指定自定義工具命名空間(如果適用)。

  • 編輯TT文件刪除[DataMemberAttribute]從導航屬性部分

的更多信息:

https://blogs.msdn.com/b/efdesign/archive/2009/01/22/customizing-entity-classes-with-t4.aspx

http://www.smartsoftwarebits.com/qaa/46-misc/107-how-to-prevent-entity-framework-navigation-property-from-being-exposed-through-wcf-service

相關問題