我遇到了一个问题,我需要将自引用表从EF6映射到DTO。
这是表格:
实体看起来像这样:
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中的结构不兼容的初始化 实体查询。一个类型可以在同一个地方初始化 查询,但仅当在两个地方都设置了相同的属性时 这些属性的设置顺序相同。
有谁知道如何解决这个问题?