c# - AutoMapper 是否有任何自定义功能来解决映射问题?
问题描述
我正在尝试通过 AutoMapper 8.0.0 将一些实体映射到 DTO,将一些 DTO 映射到实体。
这是我将实体映射到 DTO 的 AutoMapper 定义。我能够通过下面的定义将实体映射到 DTO。
但是当我尝试通过反转 Recipe 和 RecipeDTO 将 DTO 映射到实体时,我无法映射。我有错误。
我应该如何定义自动映射器初始化才能实现这一点?
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Recipe, RecipeDTO>()
.ForMember(dest => dest.Directions, opt => opt.MapFrom(src =>
src.Directions))
.ForMember(dest => dest.Ingredients, opt => opt.MapFrom(src =>
src.Ingredients))
.ForMember(dest => dest.Categories, opt => opt.MapFrom(src =>
src.Categories.Select(i => i.Name)));
});
这些是我的实体和 DTO
public class Recipe
{
public override int Id { get; set; }
public string Title { get; set; }
public int DirectionId { get; set; }
public virtual Direction Directions { get; set; }
public override DateTime CreatedDate { get; set; }
public override string CreatedBy { get; set; }
public override DateTime? ModifiedDate { get; set; }
public override string ModifiedBy { get; set; }
public override bool IsDeleted { get; set; }
public virtual ICollection<Category> Categories{get;set;}
public virtual ICollection<Ingredient> Ingredients{get; set;}
}
public class Direction
{
public override int Id { get; set; }
public string Step { get; set; }
public int RecipeId { get; set; }
public virtual Recipe Recipe { get; set; }
public override DateTime CreatedDate { get; set; }
public override string CreatedBy { get; set; }
public override DateTime? ModifiedDate { get; set; }
public override string ModifiedBy { get; set; }
public override bool IsDeleted { get; set; }
}
public class Category
{
public override int Id { get; set; }
public string Name { get; set; }
public override DateTime CreatedDate { get; set; }
public override string CreatedBy { get; set; }
public override DateTime? ModifiedDate { get; set; }
public override string ModifiedBy { get; set; }
public override bool IsDeleted { get; set; }
public virtual ICollection<Recipe> Recipes { get; set;}
}
public class Ingredient
{
public override int Id { get; set; }
public string Name { get; set; }
public override DateTime CreatedDate { get; set; }
public override string CreatedBy { get; set; }
public override DateTime? ModifiedDate { get; set; }
public override string ModifiedBy { get; set; }
public override bool IsDeleted { get; set; }
public int AmountId { get; set; }
public virtual Amount Amount { get; set; }
public int RecipeId { get; set; }
public virtual Recipe Recipe { get; set; }
}
public class Amount
{
public override int Id { get; set; }
public string Quantity { get; set; }
public string Unit { get; set; }
public override DateTime CreatedDate { get; set; }
public override string CreatedBy { get; set; }
public override DateTime? ModifiedDate { get; set; }
public override string ModifiedBy { get; set; }
public override bool IsDeleted { get; set; }
public int IngredientId { get; set; }
public virtual Ingredient Ingredient { get; set; }
}
public class RecipeDTO
{
public string Title { get; set; }
public List<string> Categories { get; set; }
public List<IngredientDTO> Ingredients { get; set; }
public DirectionDTO Directions { get; set; }
}
public class DirectionDTO
{
public string Step { get; set; }
}
public class IngredientDTO
{
public string Name { get; set; }
public AmountDTO Amount { get; set; }
}
public class AmountDTO
{
public string Quantity { get; set; }
public string Unit { get; set; }
}
解决方案
推荐阅读
- swift - SwiftUI macOS 列表行删除填充
- java - Intellij 是格式化后行内的 puttign 空格
- ms-access - 在 Access 2016 查询中使用 Countifs
- r - 带有 RestRserve 的多部分/表单数据
- php - Laravel Passport 如何从 php 代码管理客户端
- reactjs - 在扩展通用 State/Prop 中反应类更改
- authentication - 在 slapd.conf 文件中加密的密码
- microsoft-graph-api - OneDrive 文件下载返回 95 字节内容
- bash - Bash 脚本比较结合 getfattr
- airflow - 如何通过 Airflow 中的 task_id 获取上游任务的任务实例?