使用automapper自引用实体

时间:2016-12-01 09:18:23

标签: c# entity-framework linq automapper dto

我遇到了一个问题,我需要将自引用表从EF6映射到DTO。

这是表格:

enter image description here

实体看起来像这样:

public partial class Page
{
    public Page()
    {
        this.ChildPages = new HashSet<Page>();
    }

    public int PageId { get; set; }
    public string Name { get; set; }
    public string ModelName { get; set; }
    public bool IsList { get; set; }
    public bool IsActive { get; set; }
    public bool IsDeleted { get; set; }
    public System.DateTime DateCreated { get; set; }
    public System.DateTime DateModified { get; set; }
    public int Order { get; set; }
    public Nullable<int> ParentPageId { get; set; }


    public virtual ICollection<Page> ChildPages { get; set; }
    public virtual Page ParentPage { get; set; }
}

DTO模型如下所示:

 public class PageViewModel
{
    public int PageId { get; set; }
    public string Name { get; set; }
    public string ModelName { get; set; }
    public bool IsList { get; set; }
    public bool IsActive { get; set; }
    public bool IsDeleted { get; set; }
    public System.DateTime DateCreated { get; set; }
    public System.DateTime DateModified { get; set; }
    public virtual ICollection<PageViewModel> ChildPages { get; set; }
    public virtual PageViewModel ParentPage { get; set; }

}

Automapper配置如下所示:

config.CreateMap<Page, PageViewModel>().MaxDepth(8)

但是,当我运行此代码时:

var pages = DB.Pages.ProjectTo<PageViewModel>().ToList();

我得到以下异常:

  

发生了'System.NotSupportedException'类型的异常   EntityFramework.SqlServer.dll但未在用户代码中处理

     

其他信息:“PageViewModel”类型显示为两个   单个LINQ中的结构不兼容的初始化   实体查询。一个类型可以在同一个地方初始化   查询,但仅当在两个地方都设置了相同的属性时   这些属性的设置顺序相同。

有谁知道如何解决这个问题?

0 个答案:

没有答案
相关问题