我有一些POCO对象,我在EF Code First上下文中使用它们。所以,当我填充它们的数据时,我实际上是在处理EF代理对象而不是POCO本身。
我有一个ASP.NET MVC4 ApiController,返回我的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;
}
那种方法实际上是行不通的,因为当序列化器试图序列化客户端对象时,它实际上正在处理EF代理版本,这会导致出现问题。请参见Can an ApiController return an object with a collection of other objects?。
所以,我可以通过对我的DbContext
执行以下操作来关闭代理生成:
db.Configuration.ProxyCreationEnabled = false;
这确保我处理的是POCO而不是代理。但是,现在我的客户端类的大部分成员都没有填充,因为它是EF代理,可以懒加载那些信息。
所以我真正想要的是使用EF代理类获取数据,然后在最后一刻从我的方法返回原始的POCO。
我如何在不手动从头开始创建整个对象(包括任何嵌套对象)的情况下实现呢?肯定有一种简单的方法 - 或者至少有某种帮助类吧?