【发布时间】:2020-03-07 01:56:33
【问题描述】:
我与 EF Core 2.x 有多对多关系。
我创建了 3 个类:
public class Place
{
public string Name {get; set;}
public int Id {get; set;}
public ICollection<PlaceUser> Users {get; set;}
}
public class User
{
public string Name {get; set;}
public int Id {get; set;}
public ICollection<PlaceUser> Places {get; set;}
}
public class PlaceUser
{
public int UserId{get; set;}
public User User{get; set;}
public int PlaceId{get; set;}
public Place Place{get; set;}
}
public class PlaceDto
{
public string Name {get; set;}
public int Id {get; set;}
public ICollection<PlaceUserDto> Users {get; set;}
}
在我的dbcontext 中,我建立了关系。一切正常。
但是当我想将我的 Dto Place 映射到我的对象位置中的 Place 对象时,我遇到了递归和溢出异常:
我有:
Place
|-> Users
|-> User
|-> Place
|-> Users
|-> ...
我尝试在我的映射器配置中使用深度,但它不起作用。
我发现的唯一解决方法是:
if(place!=null && place.Users!=null)
{ // I set all the place.Users[i].Place = null; and place.Users[i].User=null;}
但这是一个丑陋的解决方案,一点也不方便。
那么我可以使用哪种解决方案?
谢谢,
我添加了自动映射器配置:
configuration.CreateMap<Place, PlaceDto>().MaxDepth(1);
【问题讨论】:
-
请展示您如何使用自动映射器的代码。项目到?这根本不支持递归 - 可悲的是。隐藏在文档中,我知道。
-
当然你有递归。 Placeuser 位于 placeuser 内部,而 place 位于 placeuser 中。我不是专家,但尝试像在所有示例中一样将 Virtual 放在他们两个面前。虚拟仅在需要时加载数据。
-
请edit您的问题将您拥有的源代码包含为minimal reproducible example,其他人可以编译和测试。
-
ProjectTo的主要用例是 EF6。所以,一般来说,ProjectTo支持 EF6 所支持的。 EF Core 是一个完全不同的野兽。 -
我添加了我使用的自动映射器配置
标签: c# entity-framework-core automapper