C# 将[IgnoreDataMemeber]添加到生成的分部类中的特定属性

C# 将[IgnoreDataMemeber]添加到生成的分部类中的特定属性,c#,entity-framework,entity-framework-4.1,partial-classes,C#,Entity Framework,Entity Framework 4.1,Partial Classes,我有一个实体框架POCO类,它是由T4模板生成的 我计划使用生成的类作为我的数据契约。但是,它有一些合同中不需要的属性。例如,我有一个名为AddressId的属性。它是地址表的外键。由于实际地址附加到对象,我不希望AddressId对客户端可见 我可以修改T4模板,但我宁愿不修改 我看到了这个例子,它展示了如何使用“MetadataType”向部分类中的现有属性添加属性。这是他们给出的示例: [MetadataType(typeof(Dinner_Validation))] public pa

我有一个实体框架POCO类,它是由T4模板生成的

我计划使用生成的类作为我的数据契约。但是,它有一些合同中不需要的属性。例如,我有一个名为AddressId的属性。它是地址表的外键。由于实际地址附加到对象,我不希望AddressId对客户端可见

我可以修改T4模板,但我宁愿不修改

我看到了这个例子,它展示了如何使用“MetadataType”向部分类中的现有属性添加属性。这是他们给出的示例:

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

public class Dinner_Validation 
{ 
   [Required] 
   public string Title { get; set; } 
}
但是我尝试了我的类(使用[IgnoreDataMember]),但它不起作用(AddressId仍然显示)


如何隐藏这一属性而不必创建一个全新的类来将所有数据复制到其中?

MetadataType仅适用于数据注释。它不适用于序列化属性。序列化属性必须直接放置在实体中的属性上,所以若要使用T4模板生成类,则必须添加用于直接将这些属性创建到模板的逻辑

编辑:

如果您想要构建用于生成特殊属性的逻辑,您需要以某种方式告诉T4模板哪些属性应该标记为该属性。您可以将这些信息硬编码到T4模板中,也可以将这些信息放入EDMX文件中。EDMX文件在其XML结构中支持自定义数据元素。这些自定义XML元素可以在T4模板中用于某些附加逻辑。唯一的问题是designer不支持这一点——您必须将自定义元素直接添加到以XML形式打开的EDMX中


这个整体叫做。可以在中找到一些反向处理(修改数据库生成)的示例(也可以查看问题中链接的MSDN主题)。还有一个可能允许添加新的扩展和设计器支持。我想你们也可以在书中读到这些定制。

你们试过[NonSerialized()]吗?@Yann Olaf-是的,这不管用。(NonSerialzed()用于字段,我有需要隐藏的属性。)扩展项目确实很棒。将自定义属性添加到EDMX设计器中并持久化到.EDMX文件中非常容易。