阻止实体框架序列化EntityKey,EntitySetName等

时间:2011-04-19 16:50:27

标签: entity-framework serialization

我有一个返回实体框架对象的web服务。在调用方面,除了读取信息之外我什么都不做,所以我不需要这些实体框架序列化属性。返回实体框架对象时是否可以删除以下序列化文本?

<EntityKey> <EntitySetName>ClassName</EntitySetName> <EntityContainerName>MyEntities</EntityContainerName> -<EntityKeyValues> -<EntityKeyMember> <Key>ClassID</Key> <Value xsi:type="xsd:int">9903</Value> </EntityKeyMember> </EntityKeyValues> </EntityKey>

2 个答案:

答案 0 :(得分:8)

我已经读过EF如何要求我制作一堆POCO等,这需要我做很多工作。我决定再考虑一下,并对Entity对象进行了一些挖掘。在看到它没有被密封之后,我创建了一个继承自这个类的自定义类,并使用XmlIgnore属性向EntityKey字段添加了一个“new”语句。回到我的EF设计器类,我将所有类改为继承自CustomEntityObject,而不是必须的字段。这是否是未来的证据,我对此表示怀疑。但对于这个项目,它工作得很好,并没有要求我为我的所有课程编写DTO。希望其他人发现它很有用:

public class CustomEntityObject : EntityObject {
    [DataMember]
    [Browsable(false)]
    [XmlIgnore]
    public new EntityKey EntityKey { get; set; }
}

答案 1 :(得分:0)

据我所知,这是不可能的。如果您使用EntityObject基础实体,您将始终在Web服务结果中包含此数据。如果您不想公开它们,则必须使用DTO(仅传输所需数据的自定义对象),或者必须使用不包含EntityKey的EFv4和POCO以及其他与EF相关的属性。