0

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

我有 2 个相关表(人员、角色)。

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

我希望返回的对象是一个人,并且包含相关的角色。

如果我执行这样的查询:

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

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

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

我尝试将 Serializable 属性添加到实体框架生成的类中,并将 xmlInclude 属性添加到 webmethod 但没有任何变化。

我怎么解决这个问题?

谢谢!

弗拉维奥

4

3 回答 3

1

您是否通过了 IEnumerable?尝试使用 .ToList() 来停止延迟加载并传递它。

于 2013-07-03T17:22:37.827 回答
0

创建您自己的类 Person 和 Role 并为他们创建映射器:

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;
     }
}
于 2013-07-03T14:27:09.060 回答
0

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

于 2015-07-09T14:54:01.080 回答