簡體   English   中英

將 [IgnoreDataMemeber] 添加到生成的部分 class 中的特定屬性

[英]Add [IgnoreDataMemeber] to specific properties in a generated partial class

我有一個由 T4 模板生成的實體框架 POCO class。

我打算使用生成的 class 作為我的數據合同。 但是,它有一些不需要包含在合同中的屬性。 例如,我有一個名為 AddressId 的屬性。 它是地址表的外鍵。 由於實際地址附加到 object 我不希望 AddressId 對客戶端可見。

我可以修改 T4 模板,但我不願意。

我看到這篇文章展示了如何使用“MetadataType”向部分類中的現有屬性添加屬性。 這是他們給出的例子:

[MetadataType(typeof(Dinner_Validation))] 
public partial class Dinner {} 

public class Dinner_Validation 
{ 
   [Required] 
   public string Title { get; set; } 
}

但是我為我的 class(使用 [IgnoreDataMember])嘗試了它,但它不起作用(仍然顯示 AddressId)。

我怎樣才能隱藏這個屬性而不必制作一個全新的 class 來復制我的所有數據?

MetadataType 僅適用於數據注釋。 它不適用於序列化屬性。 序列化屬性必須直接放置在實體中的屬性上,因此如果您想使用 T4 模板生成 class,您必須將創建這些屬性的邏輯直接添加到模板中。

編輯:

如果您想構建生成特殊屬性的邏輯,您需要以某種方式告訴 T4 模板哪些屬性應該使用該屬性進行標記。 您可以將此類信息硬編碼到 T4 模板中,也可以將該信息放入 EDMX 文件中。 EDMX 文件在其 XML 結構中支持自定義數據元素。 這些自定義 XML 元素可以稍后在 T4 模板中用於一些額外的邏輯。 唯一的問題是設計師不支持 - 您必須將自定義元素直接添加到以 XML 打開的 EDMX 中。

這整個稱為結構注釋 可以在我的其他答案中找到一些帶有逆向處理(修改數據庫生成)的示例(另請查看問題中鏈接的 MSDN 主題)。 還有一個完整的擴展項目,它可能允許添加新的擴展以及設計器支持。 我認為您還可以在Entity Framework 4 in Action書中閱讀有關這些自定義的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM