返回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
您是否通过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所需属性。