【问题标题】:Preventing Entity Framework from serializing EntityKey, EntitySetName, etc防止实体框架序列化 EntityKey、EntitySetName 等
【发布时间】:2013-06-21 19:40:13
【问题描述】:
我有一个重新调整实体框架对象的网络服务。在调用端,我除了读取信息什么都不做,所以我不需要这些实体框架序列化属性。返回实体框架对象时是否可以去掉以下序列化文本?
<EntityKey> <EntitySetName>ClassName</EntitySetName> <EntityContainerName>MyEntities</EntityContainerName> -<EntityKeyValues> -<EntityKeyMember> <Key>ClassID</Key> <Value xsi:type="xsd:int">9903</Value> </EntityKeyMember> </EntityKeyValues> </EntityKey>
【问题讨论】:
标签:
entity-framework
serialization
【解决方案1】:
我已经阅读了 EF 如何要求我制作一堆 POCO 等,这需要我做很多工作。我决定再考虑一下,并对 Entity 对象进行了一些挖掘。在看到它没有被密封后,我创建了一个继承自该类的自定义类,并使用 XmlIgnore 属性向 EntityKey 字段添加了一个“新”语句。回到我的 EF 设计器类,我将所有类改为从 CustomEntityObject 继承,瞧!,没有不必要的字段。这是否是未来的证据,我对此表示怀疑。但是对于这个项目,它运行良好,并且不需要我为我的所有课程编写 DTO。希望其他人觉得它有用:
public class CustomEntityObject : EntityObject {
[DataMember]
[Browsable(false)]
[XmlIgnore]
public new EntityKey EntityKey { get; set; }
}
【解决方案2】:
据我所知,这是不可能的。如果您使用 EntityObject 基本实体,您将始终在 Web 服务结果中拥有此数据。如果您不想公开它们,则必须使用 DTO(仅传输您想要的数据的自定义对象),或者您必须使用不包含 EntityKey 和其他 EF 相关属性的 EFv4 和 POCO。