Tôi có một số đối tượng POCO mà tôi đang sử dụng trong ngữ cảnh EF Code First. Vì vậy, khi tôi điền chúng với dữ liệu, tôi thực sự đang đối phó với các đối tượng proxy của EF thay vì bản thân các POCO.Cách tốt nhất để biến đối tượng proxy EF thành đối tượng POCO ban đầu là gì?
Tôi có một ASP.NET MVC4 ApiController trả về các đối tượng POCO của tôi, mà tôi sẽ tiêu thụ trong ứng dụng khách của tôi.
của tôi "GET" phương pháp trông giống như sau:
// 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;
}
Điều đó không thực sự làm việc, bởi vì khi các serializer cố gắng sắp đặt từng đối tượng khách hàng, nó thực sự làm việc với phiên bản ủy quyền EF, gây nó để nấc cục. Xem Can an ApiController return an object with a collection of other objects?
Vì vậy, tôi có thể tắt hệ proxy bằng cách làm điều này để DbContext
tôi:
db.Configuration.ProxyCreationEnabled = false;
nào đảm bảo rằng tôi đang đối phó với các POCO chứ không phải là một proxy. Tuy nhiên, bây giờ hầu hết các thành viên trong lớp Khách hàng của tôi không có dân cư, vì đó là proxy của EF đang tải những thứ đó cho tôi.
Vì vậy, điều tôi thực sự muốn là sử dụng lớp proxy của EF để lấy dữ liệu, và sau đó vào phút cuối, hãy trả lại POCO ban đầu từ phương thức của tôi.
Làm cách nào tôi có thể làm điều đó mà không cần tạo thủ công toàn bộ đối tượng từ đầu (bao gồm bất kỳ đối tượng lồng nhau nào) trong mã? Chắc chắn phải có một cách dễ dàng - hoặc ít nhất là một lớp trợ giúp của một số loại?
+1 lộ DTOs cho khách hàng từ xa là cách tốt nhất để đi. Nó cung cấp cho bạn toàn quyền kiểm soát dữ liệu được gửi qua dây. –
Cảm ơn, tôi sẽ kiểm tra AutoMapper - có vẻ như chỉ là "lớp trợ giúp của một loại nào đó" mà tôi đang tìm kiếm. –