2009-02-03 3 views
16

Khi sử dụng ADO.Net Data Services client để làm mới một thực thể bằng cách gọi LoadProperty:Resource không tìm thấy cho phân khúc 'tài sản'

ctx.BeginLoadProperty(this, "Owner", (IAsyncResult ar) => ... 

Nó ném một lỗi trên máy chủ nếu tài sản là null

Error: Exception Thrown: System.Data.Services.DataServiceException: Resource not found for the segment 'Owner'. at System.Data.Services.RequestDescription.GetSingleResultFromEnumerable(SegmentInfo segmentInfo) at System.Data.Services.DataService1.CompareETagAndWriteResponse(RequestDescription description, ContentFormat responseFormat, IDataService dataService)
at System.Data.Services.DataService1.SerializeResponseBody(RequestDescription description, IDataService dataService) at System.Data.Services.DataService1.HandleNonBatchRequest(RequestDescription description) at System.Data.Services.DataService`1.HandleRequest()

Vấn đề là khách hàng không biết tài sản là null hoặc chưa được phổ biến. Chủ sở hữu sản phẩm là liên kết từ số Vehicle đến số Customer.

Bất kỳ ý tưởng nào sai?

Cảm ơn

Trả lời

19

Truy vấn trên khóa chính tạo ra ngoại lệ khi khóa không tồn tại. Giải pháp thay thế là thêm biểu thức đúng giả trong điều kiện (ví dụ: 1 == 1 & & item.Id == XXX).

Nếu không có biểu hiện giả yêu cầu ADO.NET là:

http: //localhost//test.svc/Role(XXX)

Với điều kiện giả, yêu cầu là:

http: //localhost//test.svc/Role()?$filter=true and (Id eq 1)

Các hành vi dự kiến ​​(null trả lại) là đúng trong lần thứ hai trường hợp.

+0

[câu trả lời khác] này (http://stackoverflow.com/questions/505761/resource-not-found-for-segment-property/5987733#5987733) là một lựa chọn tốt hơn. Làm cho mã dễ đọc hơn. –

3

Tôi cũng đã nhận được lỗi "Tài nguyên không tìm thấy cho phân khúc" Thuộc tính "". Mỏ có vẻ như trong mệnh đề where tôi đang tìm kiếm bằng khóa chính. Tôi đã tìm thấy một số tài nguyên nói rằng nó sẽ ném một lỗi (ngay cả khi sử dụng FirstOrDefault()) khi sử dụng khóa chính không tồn tại (trái ngược với các mệnh đề khác không cung cấp kết quả). Tôi đoán một điều tương tự đang xảy ra với chính bạn.

+0

Có vẻ là như vậy, tôi tự hỏi tại sao? – gimpy

34

Set IgnoreResourceNotFoundException tài sản của bối cảnh dịch vụ cho đúng:

svc.IgnoreResourceNotFoundException = true; 
+0

Lưu ý rằng thuộc tính này đã được thêm vào .NET 3.5 SP1. –