Tôi đang sử dụng ASP.Net WebAPI Nightly mới nhất (ngày 2013-01-16).Trả về các phần tử con trong ASP.NET WebAPI OData
Tôi có một mô hình cơ sở dữ liệu EF đơn giản đầu tiên tại thời điểm có hai thực thể - Bệnh nhân và Số lần truy cập. Mỗi bệnh nhân có thể có nhiều lần thăm khám.
Tôi muốn có thể truy vấn danh sách bệnh nhân của mình và có các thực thể truy cập cho từng bệnh nhân được trả về nội tuyến. Tôi biết rằng việc triển khai OData của WebAPI chưa hỗ trợ $ mở rộng. Tôi hy vọng rằng điều đó chỉ có nghĩa là mở rộng được điều khiển bởi máy khách tùy chọn không được hỗ trợ và tôi có thể buộc phải mở rộng phía máy chủ.
Hiện tại tôi không nhận được bất kỳ lượt truy cập nào trong nội tuyến.
Ví dụ,) Nhận() phương pháp (PatientController tôi trông giống như
[Queryable(AllowedQueryOptions=AllowedQueryOptions.Supported)]
public override IQueryable<Patient> Get()
{
var query = this.entities.Patients.Include("Visits");
return query;
}
tôi đã xác minh rằng các truy vấn thực hiện đối với cơ sở dữ liệu của tôi không thực sự bao gồm các thông tin truy cập.
Để sử dụng dịch vụ OData có sẵn công khai làm ví dụ, nếu bạn sử dụng dịch vụ tại http://services.odata.org/OData/OData.svc/, bạn có thể nhận danh sách Nhà cung cấp. Đây là http://http://services.odata.org/OData/OData.svc/Suppliers. Bạn cũng có thể yêu cầu danh sách các nhà cung cấp bao gồm danh sách sản phẩm sử dụng http://http://services.odata.org/OData/OData.svc/Suppliers?$expand=Products
Bước qua mã ASP.NET (qua máy chủ ký hiệu) Tôi đã truy cập vào System.Web.Http.OData.Formatter .Serialization.ODataEntityTypeSerializer và có thể thấy rằng đó là phương thức CreatePropertyBag, để xây dựng danh sách các thuộc tính được tuần tự hóa, không bao gồm các thuộc tính điều hướng và dường như chúng không được liệt kê ở bất kỳ đâu ngoài việc được viết ra như NavigationLinks .
Tôi khá mới trong thế giới ASP.NET nói chung và đã dành một tuần để thu hút đầu óc xung quanh cách thức hoạt động (đặc biệt với những thay đổi được thực hiện cho OData vào cuối năm 2012 và những thay đổi khác được thực hiện đến năm 2013).
Tôi nghi ngờ rằng nếu ODataEntityTypeSerializer được sửa đổi (tôi rất vui khi thử) để nhúng thông tin bổ sung này vào vị trí thích hợp (trong mỗi liên kết điều hướng dưới dạng nguồn cấp nội tuyến lồng nhau như tốt nhất tôi có thể biết) thì tôi ' d được đặt.
Câu hỏi:
Tôi có bỏ qua một cái gì đó rõ ràng và có một lá cờ tôi có thể thiết lập để bật hành vi này? Tôi có thể thấy lý do tại sao, nếu một lá cờ như vậy tồn tại, nó sẽ bị tắt theo mặc định (tải xuống bằng EF và cờ này sẽ không hoạt động tốt)
Nếu # 1 là không, có một số ODataEntityTypeSerializer khác mà tôi có thể sử dụng? Nếu vậy, làm thế nào để chuyển sang nó?
Nếu # 2 là không, bất kỳ gợi ý nào về nơi tôi nên bắt đầu viết của riêng mình? Có một nơi tôi có thể thay thế trong serializer của riêng tôi hay tôi phải duy trì dự án Extensions của ASP.NET của tôi (trái ngược với dự án Runtime)
Cảm ơn rất nhiều!
Tôi có vấn đề ngược lại ... con thực thể của tôi là luôn luôn bao gồm mặc dù tôi không có gọi là phương pháp Include và chỉ định nó theo cách này. Tôi đang sử dụng serializer JSON.Net mặc dù vậy điều này có thể làm cho sự khác biệt ... –