0

私は、DTO に投影する 2 つのレベルのネストされた子コレクションを持っています。私の質問は、通常の親子関係にも当てはまります。

// 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- load することで、 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 に答える