0

我有一Post堂课,User里面有一个属性。当我尝试获取所有帖子时,我还想将其映射User到一个UserDto对象。

public class Post {
    public Guid Id {get; set;}
    public string Content {get;set;}
    public User User {get; set;}
}


var result = await _ctx.Posts.Include(u => u.User.Adapt<UserDto>()).ToListAsync()

在内部进行调整Include会引发此错误:

Include 中使用的 Lambda 表达式无效

4

1 回答 1

2

看来您混淆了,Include因为Entity Framework两者Mapster都具有该功能。您向我们展示的Include属于Entity Frameworkhttps ://docs.microsoft.com/en-us/ef/core/querying/related-data#eager-loading

因此,首先您需要使用Include以下方法检索数据:

var result = await _ctx.Posts.Include(u => u.User).ToListAsync();

另一方面,您需要设置 mapster 配置:

TypeAdapterConfig<Post, PostDto>.NewConfig()
    .PreserveReference(true);

TypeAdapterConfig<User, UserDto>.NewConfig()
    .PreserveReference(true);

请参阅 Mapster 中的嵌套映射:

https://github.com/MapsterMapper/Mapster/wiki/Config-for-nested-mapping

因此,您可以获得PostDto其中包括UserDto

var postDto = result.Adapt<PostDto>();
于 2020-06-08T10:31:31.990 回答