Сериализация моделей Entity Framework с помощью .NET WCF Rest Service - PullRequest
1 голос
/ 26 апреля 2010

Я пытаюсь собрать очень простой интерфейс в стиле REST для общения с нашими партнерами. Примером объекта в API является партнер, которого мы хотели бы сериализовать так:

<partner>
    <id>ID</id>
    <name>NAME</name>
</partner>

Это довольно просто сделать с помощью шаблона REST .NET 4.0 WCF, если мы просто объявим класс партнера как:

public class Partner
{
    public int Id {get; set;}
    public string Name {get; set;}
}

Но когда я использую Entity Framework для определения и хранения объектов Partner, результирующая сериализация выглядит примерно так:

<Partner p1:Id="NCNameString" p1:Ref="NCNameString" xmlns:p1="http://schemas.microsoft.com/2003/10/Serialization/" xmlns="http://schemas.datacontract.org/2004/07/TheTradeDesk.AdPlatform.Provisioning">
  <EntityKey p1:Id="NCNameString" p1:Ref="NCNameString" xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
    <EntityContainerName xmlns="http://schemas.datacontract.org/2004/07/System.Data">String content</EntityContainerName>
    <EntityKeyValues xmlns="http://schemas.datacontract.org/2004/07/System.Data">
...

Этот XML явно неприемлем для использования в качестве внешнего API. Каковы предлагаемые механизмы использования EF для хранилища данных, но при этом поддерживается простой интерфейс сериализации XML?

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Просто проецируйте на ваш тип Partner, как определено в вашем вопросе:

var q = from p in Context.Partners
        select new MySerializationTypes.Partner
        {
            Id = p.Id,
            Name = p.Name
        };

... а затем сериализовать это.

0 голосов
/ 26 апреля 2010

Похоже, вам понадобится набор объектов для обеспечения слоя между EF и вашим внешним API.

Хотя это кажется излишним, это не совсем беспрецедентная практика. Это делается все время в шаблоне MVC, когда вам нужен уровень абстракции между представлением и базовым хранилищем данных.

Дополнительный уровень абстракции предоставляет вам возможность определить точный интерфейс, который вы хотите, с гибкостью и контролем для взаимодействия с EF именно так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...