Как лучше всего превратить прокси-объект EF в исходный объект POCO?

У меня есть несколько объектов POCO, которые я использую в контексте EF Code First. Итак, когда я заполняю их данными, я фактически имею дело с прокси-объектами EF, а не с самими POCO.

У меня есть ApiController ASP.NET MVC4, который возвращает мои объекты POCO, которые я буду использовать в своем клиентском приложении.

Мой метод "GET" выглядит примерно так:

    // GET api/Clients/5
    public Client GetClient(int id)
    {
        Client client = db.Clients.Find(id);
        if (client == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }

        return client;
    }

На самом деле это не работает, потому что, когда сериализатор пытается сериализовать объект Client, он на самом деле имеет дело с прокси-версией EF, что вызывает его сбои. См. Может ли ApiController вернуть объект с набором других объектов?

Таким образом, я мог отключить генерацию прокси, сделав это со своимDbContext:

    db.Configuration.ProxyCreationEnabled = false;

Что гарантирует, что я имею дело с POCO, а не с прокси. Но теперь большинство членов моего класса Client не заполнены, так как это был прокси-сервер EF, который лениво -загружал их для меня.

Итак, что я действительно хочу, так это использовать прокси-класс EF для получения данных, а затем в последнюю минуту вернуть исходный POCO из моего метода.

Как я могу сделать это, не создавая вручную весь объект с нуля (, включая любые вложенные объекты )в коде? Наверняка должен быть простой способ -или хотя бы какой-нибудь вспомогательный класс?

5
задан Community 23 May 2017 в 12:02
поделиться