2013-07-03 36 views
0

我在C#中使用實體框架來創建Web服務來檢索數據。在c#中的asmx webservice返回嵌套的EF對象#

我有2個相關的表格(人物,角色)。

每個人都有一個關聯的角色。

我希望返回的對象是一個Person,並且包含相關的角色。

如果我執行這樣的查詢:

From p in ef.Person.Include("Role") select p 

調試我可以看到每個人的作用對象是加載。

但是,返回的/生成的XML只包含一個RoleReference,它提供了有關相關對象的信息,但不包含對象本身。

我試圖將Serializable屬性添加到由實體框架生成的類以及webmethod的xmlInclude屬性,但沒有任何更改。

我該如何解決這個問題?

謝謝!

弗拉維奧

+0

可以顯示代碼,用於返回查詢結果嗎? – Botis

回答

0

創建自己的類人&作用和爲他們創建映射器:

public class MyPerson 
{ 
    [DataMember] 
    public int ID {get; set;} 
    [DataMember] 
    public string Name {get; set;} 
    ... 
    [DataMember] 
    public MyRole PersonRole {get; set;} 
} 

public class MyRole 
{ 
    [DataMember] 
    public int ID {get; set;} 
    ... 
} 

映射:

MyRole Mapper(EFRole role) 
{ 
    return new MyRole() { 
     id = role.id, ... 
    } 
} 

MyPerson Mapper(EFPerson person) 
{ 
    return new MyPerson() { 
     id = person.id, 
     .... 
     PersonRole = (person.Role != null ? Mapper(person.Role) : null; 
    } 
} 
+0

謝謝,但它是爲應用程序的目的而「複雜」(這只是一個測試,將基於EF的WCF數據服務與基於相同EF的「asmx」web服務進行比較)...我稍後會嘗試... –

1

你傳遞了​​IEnumerable?嘗試使用.ToList()來停止延遲加載並通過它。

+0

延遲加載已禁用。我試圖使用toList,但它不起作用。 如果我以調試模式停止代碼以檢查查詢結果,它是正確的,但由webservice生成的返回的XML僅包含嵌套對象的regerence。 –

+0

你能提供更多的代碼嗎?也許Web服務類聲明和序列化代碼? –

0

使用名爲Person的部分類,其中包含角色嵌套對象或角色需要的屬性。

+0

可否請您描述一個更詳細的答案,也許有一些示例代碼。 – bish