gpt4 book ai didi

c# - AutoMapper:将元组映射到元组

转载 作者:行者123 更新时间:2023-11-30 22:08:43 25 4
gpt4 key购买 nike

我在我的 ASP.NET MVC4 项目中使用 AutoMapper。映射 2 类问题和问题 View 模型时遇到问题。这是我的两个模型类:

   public class Question
{
public int Id { get; set; }
public string Content { get; set; }
public Tuple<int, int> GetVoteTuple()
{
"some code here"
}
}

public class QuestionViewModel
{
public int Id { get; set; }
public string Content { get; set; }
public Tuple<int, int> VoteTuple { get; set; }
}

这是我的 Controller 代码:

   public class QuestionController: Controller 
{
public ActionResult Index(int id)
{

Question question = Dal.getQuestion(id);
Mapper.CreateMap<Question, QuestionViewModel>()
.ForMember(p => p.VoteTuple,
m => m.MapFrom(
s => s.GetVoteTuple()
));

QuestionViewModel questionViewModel =
Mapper.Map<Question, QuestionViewModel>(question);

return View(questionViewModel);

}
}

当我运行此代码时,QuestionViewModel 中的 VoteTuple 属性具有空值。如何使用 Tuple 属性映射 2 类?

谢谢。

最佳答案

默认情况下无法通过 Automapper 从 Tuple 映射到 Tuple,因为 Tuple 没有 setter 属性(它们只能通过构造函数初始化)。

你有两个选择:

1) 为 Automapper 创建自定义解析器,然后在映射配置中使用 .ResolveUsing 方法:.ForMember(p => p.VoteTuple, m => m.ResolveUsing<CustomTupleResolver>())

2) 改为映射到属性/类,如下所示:

public class QuestionViewModel
{
public int Id { get; set; }
public string Content { get; set; }
public int VoteItem1 { get; set; }
public int VoteItem2 { get; set; }
}

然后:

.ForMember(p => p.VoteItem1, m => m.MapFrom(g => g.Item1))
.ForMember(p => p.VoteItem2, m => m.MapFrom(g => g.Item2))

你真的不需要在你的 View 模型中使用 Tuple,所以我推荐第二个选项。

编辑:

我看到您已经更新了代码,因此 GetVoteTuple() 是一个函数,而不是一个属性。在这种情况下,您可以像这样轻松调整代码:

.ForMember(p => p.VoteItem1, m => m.MapFrom(g => g.GetVoteTuple().Item1))
.ForMember(p => p.VoteItem2, m => m.MapFrom(g => g.GetVoteTuple().Item2))

关于c# - AutoMapper:将元组映射到元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22097693/

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