在我的目前的公司,他们使用Dapper作为ORM工具,并且不使用AutoMapper,因为他们认为Dapper会在内部为您进行映射。所以他们构建了一个单独的类库项目,其中包含Dtos,并在DataAccess和Business层中引用了Dtos。
由Dapper返回的查询会被内部映射到Dtos。这些Dtos会返回给业务层,依此类推。
例如,在下面的代码中,Participant函数就是一个Dto。 DataAccess层的存储库文件:
public List<ParticipantFunction> GetParticipantFunctions(int workflowId)
{
// Update the Action for Participant
string selectSql = @"SELECT [WFPatFunc_ID] AS WFPatFuncID
,[WFFunction]
,[SubIndustryID]
,[DepartmentID]
FROM [dbo].[WF_ParticipantsFunctions]
WHERE [DepartmentID] = (SELECT TOP 1 [DepartmentID] FROM [dbo].[WF] WHERE [WF_ID] = @workflowId)";
return _unitOfWork.GetConnection().Query<ParticipantFunction>(selectSql, new
{
workflowId = workflowId
}).ToList();
}
开发人员告诉我,使用AutoMapper会增加开销并影响速度,而且Dapper内部已经有映射功能,因此不需要它。
我想知道他们所遵循的做法是否正确无误。
json
形式传递的,并且您不需要操作或创建ViewModel
,我不认为在这种情况下使用Automapper
有什么帮助。 @VijayRaheja 我认为获取所有实体,然后将它们转换为DTO就像开始使用它的第一步,但当您需要更高效的查询并创建一个“DTO”来返回时,最好是获取实体,然后将其转换为“DTO”并返回。 - jjchiwDTO's
,为什么不直接称之为TO's
呢 :) - jjchiw