gpt4 book ai didi

c# - 为什么 AutoMapper 不使用 ProjectTo 映射二级导航属性?

转载 作者:行者123 更新时间:2023-11-30 18:11:38 27 4
gpt4 key购买 nike

我有这个简单的类

public class Store {
public int Id { get; set; }

//Other properties

[JsonIgnore]
public ICollection<Product> Products { get; set; }
}

和我的 DTO

public class StoreDetails {
public int Id { get; set; }

//Other properties

public ICollection<Product> Products { get; set; }
}

和我的 Product 类:

public class Product {
public int? Id { get; set; }

//Other properties

public ICollection<ProductAttribute> ProductAttributes { get; set; }
}

我的映射看起来像这样:

var storeDetails = await _context.Stores
.Include(s => s.Products)
.ThenInclude(p => p.ProductAttributes)
.ProjectTo<StoreDetails>(new MapperConfiguration(c => c.CreateProfile("TEST", e => {
e.CreateMap<Store, StoreDetails>();
})))
.SingleOrDefaultAsync(p => p.Id == id);

Store 对象中的一切看起来都很好,但在 StoreDetails 中,ProductAttributes 每次都是 null。

为什么 AutoMapper 不使用 ProjectTo 映射二级导航属性?

注意:我使用的是 AutoMapper 8.1.1。

最佳答案

我认为你应该像这样在你的类中添加虚拟属性

public class Store {
public int Id { get; set; }

//Other properties

[JsonIgnore]
public virtual ICollection<Product> Products { get; set; }
}

public class StoreDetails {
public int Id { get; set; }

//Other properties

public virtual ICollection<Product> Products { get; set; }
}

也可以这样用Profile来映射

public class StoreProfile : Profile
{
public StoreProfile ()
{
CreateMap<Store, StoreDetails>(MemberList.None).ReverseMap();
}
}

然后在你的startup.cs中注册

services.AddAutoMapper();

这就是你映射到个人资料的方式

private readonly IMapper _mapper;

var storeDetails = await _context.Stores
.Include(s => s.Products)
.ThenInclude(p => p.ProductAttributes)
.Select(
x => new ViewModel {
SomeObject = _mapper.Map<Store, StoreDetails>(x)
}
)
.SingleOrDefaultAsync(p => p.Id == id);

下面是我使用的版本

<PackageReference Include="AutoMapper" Version="8.0.0" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="6.0.0" />

关于c# - 为什么 AutoMapper 不使用 ProjectTo 映射二级导航属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57361911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com