У меня есть несколько объектов 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 из моего метода.
Как я могу сделать это, не создавая вручную весь объект с нуля (, включая любые вложенные объекты )в коде? Наверняка должен быть простой способ -или хотя бы какой-нибудь вспомогательный класс?