0

我有一个两级嵌套子集合,我将其投影到 DTO 中。我的问题也适用于常规的父->子关系:

// There are two types on Parent and two types of Child classes,
// one is EF model, and another is DTO (here I show only one, for simplicity)
public class Parent
{
    public int Id {get;set;}
    public IEnumerable<Child> Children {get;set;}
}

public class Child
{
    public int Id {get;set;}
    public Parent Parent {get;set;}
}

var list = context.Set<Parent>().Select(p=> new DTO.Parent
    {
        Id = p.Id
        Children = (p.Children.Select(c=> new DTO.Child
            {
                Id=c.Id,
                Parent = ?
            }))
    });

在进行投影时是否可以为子对象分配父引用?

4

2 回答 2

1

您可以通过 eagar-loading 子项使用 Automapper进行映射:

Mapper.CreateMap<Parent, DTO.Parent>();
Mapper.CreateMap<Child, DTO.Child>();
var list = Mapper.Map<IEnumerable<DTO.Parent>>(context.Set<Parrent>()
                                                      .Include(p => p.Children)
                                                      .AsEnumerable());

Automapper 会将每个实体映射到 dto,并为每个 dto 子级提供对 dto 父实例的引用。

于 2013-03-11T14:58:52.687 回答
0

我认为不可能Parent直接在查询中设置。因此,这只是另一种解决方法,类似于“DTO 关系修复”:

public class Parent
{
    public int Id {get;set;}

    private IEnumerable<Child> _children;
    public IEnumerable<Child> Children
    {
        get { return _children; }
        set
        {
            _children = value;
            if (_children != null)
                foreach (var child in _children)
                    child.Parent = this;
        }
    }
}
于 2013-03-11T17:33:27.730 回答