我有一些在 EF Code First 上下文中使用的 POCO 对象。因此,当我用数据填充它们时,我实际上是在处理 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;
}
这实际上不起作用,因为当序列化程序尝试序列化 Client 对象时,它实际上是在处理 EF 代理版本,这会导致它打嗝。请参阅ApiController 可以返回带有其他对象集合的对象吗?
所以,我可以通过这样做来关闭代理生成DbContext
:
db.Configuration.ProxyCreationEnabled = false;
这确保我正在处理 POCO 而不是代理。但是,现在我的 Client 类的大多数成员都没有填充,因为是 EF 代理为我延迟加载这些成员。
所以我真正想要的是使用 EF 代理类来获取数据,然后在最后一刻从我的方法中返回原始 POCO。
如果不在代码中从头开始手动创建整个对象(包括任何嵌套对象),我该如何做到这一点?当然必须有一个简单的方法 - 或者至少是某种帮助类?