将添加到生成的分部类中的特定属性

我有一个由T4模板生成的entity frameworkPOCO类。

我打算使用生成的类作为我的数据契约。 但是,它有一些不需要在合同中的属性。 例如,我有一个名为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模板中用于一些额外的逻辑。 唯一的问题是设计人员不支持 – 您必须将自定义元素直接添加到以XML格式打开的EDMX中。

这整个称为结构注释 。 可以在我的其他答案中找到一些反向处理(修改数据库生成)的示例(也请查看问题中链接的MSDN主题)。 还有整个扩展项目 ,可能允许添加新的扩展和设计器支持。 我想您也可以在Action Book Framework中的Entity Framework 4中阅读这些自定义。