0

我正在编写一个在后端使用 WebAPI 和实体框架的 PhoneGap/Web/JS 移动应用程序。

我有一个名为 Thing 的类,它引用 User 表 4 次(ChangedByUserId、CreatedByUserId 等。User 表非常大(30 个与用户相关的字段)

我想在每次调用中传递尽可能少的数据,但我需要每个 UserID 外键的用户名。(这是我需要的用户记录中的唯一信息)。

当我在 EF 中使用对象图时,它会为每个外键返回完整的用户记录,因此单个 Thing 对象会变得非常臃肿。我不想多次调用来获取 Thing POCO 对象,然后通过 UserID 获取用户名。

我真正想做的是一种扁平化的 DTO 对象,它只是下面的 Thing 类,但每个用户名都有一个字符串,例如 CreatedByUserName、ChangedByUserName 等。然后我会将此 DTO 作为我的水合 POCO 对象返回,数据将变小。

所以我的问题是:我如何使用实体框架来做到这一点?(限制相关记录的返回数据?)

public partial class Thing
{
    public int ThingId { get; set; }
    public int FromUserId { get; set; }
    public int ToUserId { get; set; }
    public string ThingText { get; set; }
    public int StatusId { get; set; }
    public int ChangedByUserId { get; set; }
    public int CreatedByUserId { get; set; }

    public virtual User FromUser { get; set; }
    public virtual User ToUser { get; set; }
    public virtual User CreatedByUser { get; set; }
    public virtual User ChangedByUser { get; set; }
}
4

1 回答 1

0

正如你所说,你需要展平事物

public class FlatThing
{
    public int ThingId { get; set; }
    public int FromUserId { get; set; }
    public int ToUserId { get; set; }
    public string ThingText { get; set; }
    public int StatusId { get; set; }
    public int ChangedByUserId { get; set; }
    public int CreatedByUserId { get; set; }

    public string FromUserName { get; set; }
    public string ToUserName{ get; set; }
 }

 // assume you have your things

var flatThings = new List<FlatThings>;
foreach (Thing t in things)
    flatThings.Add(new FlatThing{ ThingId = t.ThingId, FromUserId = t.FromUserId,
                                  FromUserName = t.FromUser.Name .....});

return flatThings;
于 2013-06-11T08:28:41.107 回答