Служба данных WCF, сериализация дополнительных свойств из частичных классов Entity Framework - PullRequest
8 голосов
/ 11 сентября 2010

Я нахожусь в процессе создания API почти таким же образом Хансельман показал, что это можно сделать для Stackoverflow . У меня есть куча EntityObject сгенерированных Entity Framework классов и DataService штук для сериализации их в Atom и JSON. Я хотел бы показать некоторые сгенерированные свойства через веб-сервис. Подумайте FullName как сгенерированный путем объединения First- и LastName (но некоторые являются более сложными). Я добавил их в частичный класс, расширяющий Entity Framework EntityObject, и дал им атрибут [DataMember], но они не отображаются в сервисе. Вот пример атрибута (set добавлен для хорошей меры, без него тоже не работает):

[DataMember]
public string FullName
{
    get
    {
        return (this.FirstName ?? "") + " " + (this.LastName ?? "");
    }
    set { }
}

Согласно этим обсуждениям на форумах MSDN, это известная проблема. Кто-нибудь нашел хорошие обходные пути или у кого-нибудь есть предложения по альтернативам?

1 Ответ

0 голосов
/ 13 сентября 2010

У меня была та же проблема, связанная с выставлением объектов Entity через службу WCF, и я использовал обходной путь, который вы связали с здесь , который заключается в добавлении следующего атрибута к свойствам, чтобы заставить их сериализоваться.

[global::System.Runtime.Serialization.DataMemberAttribute()] 

Я не нашел "хороших" способов заставить это работать.

Например, для сущности Учитель с полями Название, Имя и Фамилия вы можете добавить частичный класс для Учителя, например:

public partial class Teacher
{
    [global::System.Runtime.Serialization.DataMemberAttribute()] 
    public string FullName
    {
        get { return string.Format("{0} {1} {2}", Title, Forenames, Surname); }
        set { }
    }
}

Затем, если ваш интерфейс службы WCF ссылается на этот класс, дополнительные свойства сериализуются и становятся доступными для потребителей службы.

например.

[OperationContract]
List<Teacher> GetTeachers();
...