我在EF Code First上下文中使用了一些POCO對象。所以,當我用數據填充它們時,實際上我正在處理EF代理對象而不是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代理的版本,這將導致它打嗝。見Can an ApiController return an object with a collection of other objects?
所以,我可以這樣做是爲了我的DbContext
關閉代理代:
db.Configuration.ProxyCreationEnabled = false;
這保證了我處理與POCO,而不是代理。但是,現在我的Client類中的大多數成員都沒有填充,因爲它是EF代理懶惰加載這些給我的。
所以我真正想要的是使用EF代理類來獲取數據,然後在最後一分鐘從我的方法返回原來的POCO。
我怎麼能做到這一點,而無需手動從頭創建整個對象(包括任何嵌套對象)的代碼?當然,必須有一個簡單的方法 - 或者至少是某種助手類?
+1暴露DTO的遠程客戶端是最好的一段路要走。它使您可以完全控制通過線路發送的數據。 – 2012-08-01 15:53:57
謝謝,我會檢查AutoMapper - 這聽起來就像我正在尋找的「某種助手類」。 – 2012-08-01 22:13:46