gpt4 book ai didi

c# - 如何使用 AutoMapper 将食谱与配料进行映射

转载 作者:行者123 更新时间:2023-11-30 22:58:40 26 4
gpt4 key购买 nike

我有以下 RecipeModel、IngredientModel 和 RecipePartModel 类,它们代表前端用户的 DTO 类:

public class RecipeModel
{
public Guid Id { get; set; }
public string Name { get; set; }
public string ImageUrl { get; set; }
public string Description { get; set; }
public IEnumerable<RecipePartModel> RecipeParts { get; set; }
}

public class IngredientModel
{
public Guid Id { get; set; }
public string Name { get; set; }
}

public class RecipePartModel
{
public Guid Id { get; set; }
public IngredientModel Ingredient { get; set; }
public string Unit { get; set; }
public decimal Quantity { get; set; }
}

这是我的实体类:

public class Recipe : BaseEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public string ImageUrl { get; set; }
public string Description { get; set; }
public virtual IEnumerable<RecipePart> RecipeParts { get; set; }
}

public class Ingredient : BaseEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public int Amount { get; set; }
public virtual IEnumerable<RecipePart> RecipeParts { get; set; }
}

public class RecipePart : BaseEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid Id { get; set; }
public Ingredient Ingredient { get; set; }
public Recipe Recipe { get; set; }
public string Unit { get; set; }
public decimal Quantity { get; set; }
}

我的问题是 - 如何使用 AutoMapper 将 Recipe 映射到 RecipeModel?我尝试过类似的方法,但我认为它不好,因为它只是加入了整个数据库的所有 RecipePart,对吗?

public class DomainProfile : Profile
{
public DomainProfile()
{
CreateMap<Ingredient, IngredientModel>().ReverseMap();
CreateMap<Recipe, RecipeModel>()
.ForMember(x => x.RecipeParts, opt => opt.MapFrom(src => src.RecipeParts));
}
}

最佳答案

要回答有关如何使用 AutoMapper 将一种类型映射到另一种类型的问题,有很多方法可以做到这一点。文档在这里:http://docs.automapper.org/en/stable/Getting-started.html .

我编写了一个控制台应用程序,并使用您的代码以我知道的最快方式让它运行起来。当我对此进行调试并检查 recipeModel 内部时,它引用了具有单个 RecipePartModel 的 RecipePartModel 列表。在 RecipePartModel 中,它引用了一个 IngredientModel。

    static void Main(string[] args)
{
var profile = new DomainProfile();

Mapper.Initialize(cfg => cfg.AddProfile(profile));

var recipe = new Recipe
{
RecipeParts = new List<RecipePart>
{
new RecipePart()
{
Ingredient = new Ingredient()
}
}
};

var recipeModel = Mapper.Map<Recipe, RecipeModel>(recipe);

Console.ReadKey();
}

要回答您对从数据库中获取所有食谱的担忧,如果您使用的是 Entity Framework,这取决于您是否启用了延迟加载。延迟加载确保当您从数据库中获取配方时,不会加载配方部分。只有当您稍后在程序流程中直接访问配方部分时,它们才会被加载。默认情况下启用延迟加载,因此这是默认行为。如果您将其关闭,您就启用了预先加载,它会加载所有配方部分,进而加载它们的成分。

这可能有帮助:http://www.entityframeworktutorial.net/lazyloading-in-entity-framework.aspx .

关于c# - 如何使用 AutoMapper 将食谱与配料进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52879303/

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