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

本文关键字:分类 属性 IgnoreDataMemeber 添加 | 更新日期: 2023-09-27 18:01:27

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

我计划使用生成的类作为我的数据契约。然而,它有一些不需要在合同中出现的属性。例如,我有一个属性叫AddressId。它是地址表的外键。因为实际的地址是附加到对象上的,所以我不希望AddressId对客户端可见。

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

我看到了这篇文章,展示了如何使用"元数据类型"在部分类中为现有属性添加属性。这是他们给出的例子:

[MetadataType(typeof(Dinner_Validation))] 
public partial class Dinner {} 
public class Dinner_Validation 
{ 
   [Required] 
   public string Title { get; set; } 
}

但我尝试了我的类(使用[IgnoreDataMember]),它不工作(AddressId仍然显示)。

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

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

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

编辑:

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

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