返回c#中asmx Web服务中的嵌套EF对象

本文关键字:嵌套 EF 对象 Web asmx 返回 服务 | 更新日期: 2023-09-27 18:20:48

我正在C#中创建一个Web服务,使用实体框架来检索数据。

我有两个相关的表格(人员、角色)。

每个人都有一个关联的角色。

我希望返回的对象是Person,并且包含关联的Role。

如果我执行这样的查询:

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

在调试中,我可以看到每个人的Role对象都已加载。

但是返回/生成的XML只包含一个RoleReference,该RoleReference向我提供有关相关对象的信息,而不包含对象本身。

我试图将Serializable属性添加到实体框架生成的类中,并将xmlInclude属性添加到Web方法中,但没有任何更改。

我该如何解决这个问题?

谢谢!

Flavio

返回c#中asmx Web服务中的嵌套EF对象

您是否通过IEnumerable?尝试一个.ToList()来停止延迟加载,然后传递它。

创建自己的类Person&角色并为他们创建映射器:

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;
     }
}

使用名为Person的Partial类,该类包括Role嵌套对象或Role所需属性。