У меня есть веб-сервис, который настраивает объекты структуры сущностей. На вызывающей стороне я ничего не делаю, кроме как читаю информацию, поэтому мне не нужны эти атрибуты сериализации структуры сущностей. Можно ли удалить следующий сериализованный текст при возврате объектов структуры сущности?

<EntityKey> <EntitySetName>ClassName</EntitySetName> <EntityContainerName>MyEntities</EntityContainerName> -<EntityKeyValues> -<EntityKeyMember> <Key>ClassID</Key> <Value xsi:type="xsd:int">9903</Value> </EntityKeyMember> </EntityKeyValues> </EntityKey>
4
Josh 19 Апр 2011 в 20:50

2 ответа

Лучший ответ

Я читал о том, как EF потребует от меня сделать кучу POCO и тому подобное, что потребовало от меня много работы. Я решил подумать над этим еще немного и покопался в объекте Entity. Убедившись, что он не запечатан, я создал собственный класс, наследующий от этого класса, и добавил «новый» оператор в поле EntityKey с атрибутом XmlIgnore. Вернувшись к моему классу конструктора EF, я изменил все классы, чтобы они унаследовали от CustomEntityObject, и вуаля !, никаких лишних полей. Я сомневаюсь, что это будущее. Но для этого проекта он отлично работает, и мне не нужно было писать DTO для всех моих классов. Надеюсь, кто-то еще сочтет это полезным:

public class CustomEntityObject : EntityObject {
    [DataMember]
    [Browsable(false)]
    [XmlIgnore]
    public new EntityKey EntityKey { get; set; }
}
8
Josh 20 Апр 2011 в 00:09
Не переживает обновления схемы с сервера, но легко исправляется.
 – 
Vaiden
21 Фев 2014 в 18:09

Насколько я знаю, это невозможно. Если вы используете базовые сущности EntityObject, у вас всегда будут эти данные в результатах веб-сервиса. Если вы не хотите раскрывать их, вы должны либо использовать DTO (настраиваемые объекты, которые будут передавать только те данные, которые вам нужны), либо вы должны использовать EFv4 и POCO, которые не содержат EntityKey и другие свойства, связанные с EF.

0
Ladislav Mrnka 19 Апр 2011 в 23:03