MetaData类上的IgnoreDataMember属性不起作用

时间:2016-09-29 10:50:38

标签: c# entity-framework serialization attributes

我首先使用的是实体框架v6.0 DB。

我遇到一个问题,即由于某个导航属性,某个类因序列化而中断。

当我添加到自动生成的cs类时,属性 IgnoreDataMember 一切都按预期工作(序列化传递),但我当然不能把它留在那里,因为接下来有人生成脚本它会消失的时间所以我创建了MetaData类,如下所示,它只是无法正常工作。 (序列化仍然破裂)

元数据:

public class SomeClassMetaData
{
    [IgnoreDataMember]
    public virtual ICollection<SomeFoo> FOO { get; set; }
}

部分(非自动生成)类:

[MetadataType(typeof(SomeClassMetaData))]
public partial class SomeClass
{

}

类的部分(自动生成)部分:

public virtual ICollection<SomeFoo> FOO { get; set; }

我查了一下:

  • 部分类名称相同
  • 相同的命名空间
  • 两个部分公开
  • 打开模型浏览器并保存。

不知道出了什么问题。

2 个答案:

答案 0 :(得分:1)

可悲的是[IgnoreDataMember]不适用于EF6代理对象。 Metadatatype仅适用于DataAnnotations。不适用于序列化。必须直接在实体中的属性上指定。如果使用T4模板生成类,则可能需要添加一些逻辑以直接在模板中创建这些属性。您应该考虑执行此操作的功能称为“结构注释”。请查看此链接以获取更多信息。

https://blogs.msdn.microsoft.com/efdesign/2008/08/12/structural-annotations-one-pager/

答案 1 :(得分:0)

根据Raj的回答,这是不可能做到的。

我做的解决方法是选择没有该导航属性的表。 (在我的例子中,我们使用oData,所以只使用$ select到除了这一列之外的所有列。)