【发布时间】:2014-12-06 14:58:01
【问题描述】:
在GET 请求中,我可以使用AutoMapper 轻松创建从后端模型到自定义DTO 的映射。但是,在将 AutoMapper 与 POST 请求一起使用时,我有些担心。
假设用户在线订购产品,他向服务器发送POST 请求,其中包含一些所需的数据。事实上,并不是后端模型中的每一条数据都是由用户发送的。假设Order 的ID 是一个GUID,它是在将条目插入数据库时自动生成的;或者也许还有其他自动递增的属性。所有这些 cannot-be-mapped 属性会导致大量 .ForMember(dest => dest.myProperty, opt => opt.Ignore()) 链,并在 var mappedInstance = Mapper.Map<PostDTO, BackEndModel>(postDTO) 之后对映射实例进行额外处理。
AutoMapper 不是为上述场景设计的吗?如果后端模型比 DTO 复杂得多,那么处理模型映射过程的做法是什么?
更新
public class MultipleChoiceQuestion
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid MultipleChoiceQuestionId { get; set; }
[Required]
public string Question { get; set; }
[Required]
public ICollection<PossibleChoice> PossibleChoices { get; set; }
}
public class PossibleChoice
{
[Key, Column(Order = 1), ForeignKey("MultipleChoiceQuestion")]
public Guid MultipleChoiceQuestionId { get; set; }
[Key, Column(Order = 2)]
public int ChoiceIndex { get; set; }
[Required]
public string AnswerText { get; set; }
public MultipleChoiceQuestion MultipleChoiceQuestion { get; set; }
}
用户发送创建新问题的请求。仅发送 2 个字段。
{
"Question": "How are you?",
"Answers": [
{ "Text": "I am fine." },
{ "Text": "Feeling bad." }
]
}
现阶段缺少的属性:
- MultipleChoiceQuestionId
- 插入后生成
- 选择索引
- 自动从 1 增加到可用答案的数量
如果没有手动映射,AutoMapper这种情况如何处理?
【问题讨论】:
-
当我遇到类似情况时,我将自己对使用自动映射的犹豫解释为涉及太多业务逻辑的强烈指标,因此转而使用手动映射。你转向 SO 的事实可能就足够了:)
-
在现场使用映射器插件处理
insert请求是否常见? -
我通常只使用 AutoMapper 来展平 DTO 或查看模型。 AutoMapper 非常适合展平,但不太适合复制将持久化回数据库的有效对象树。
-
Jasen,这正是我想知道的,因为网络上的许多文章指出,
AutoMapper处理两个方向的映射是绝对可行和可行的,DTO <---> back-end model。但是,我发现自己处于我的问题中提到的情况。
标签: asp.net entity-framework automapper dto