2009-01-30 99 views
2

我正在使用ADO.Net數據服務並且有一個服務操作,最終將某些linq的結果返回給實體語句。作爲Linq聲明的一部分,有一個.Include(「NavProp」)包含一個子對象。運行此服務操作時,它似乎不會返回該展開的包含。有誰知道爲什麼這是或如何解決這個問題?是否可以在對服務操作的調用中添加關鍵字來擴展該子對象? (我試過$ expand = subObject,但似乎不工作 - 錯誤的請求)。如何使用「包含」ADO.Net數據服務的服務操作

我想跟要麼結束:在返回​​在.include也是一個服務操作的LINQ聲明 1)語法(我敢肯定,這是不可能的)

something like: 
(from c in context.MyObj.Include("SubObj") 
select c).ToList() 
(this works inside the service operation, but doesn't provide the SubObj on the client side) 

2.)語法服務操作請求以展開子對象

something like: http://localhost/MyDataService/MyDataService.svc/ServiceOp1?param1=234$expand=SubObj (note: this doesn't work) 

回答

1

看起來這是不可能的目前(.NET 3.5 SP1)。服務操作只會返回主要類型或實體。包括自定義類型或擴展實體的任何其他類型都不能從服務操作返回。要解決這個問題,必須從服務操作返回項目,然後如果客戶端需要包含/展開,則必須調用「LoadProperty」以獲得所需的對象擴展(注意:這意味着另一個數據庫命中每個LoadProperty調用)。

1

通過電子郵件發送MS在這個問題上,解決方案是在服務操作的uri上使用擴展查詢選項。例如,

.../<ServiceOperationName>.svc?$expand=<Property1Name>,<Property2Name> ... 

Service Operation: GetCustomer 
Relationship Property to load: Address 
Uri: .../<GetCustomer>.svc?$expand=Address 

希望這會有所幫助。