c# - Automapper - 避免重复
问题描述
我的架构是 WEBAPI.NET Core 2.2 。
它是一个基本的 N 层架构:控制器-> 服务/域层-> 数据层(dapper)-> 存储过程。
在我 80% 的数据库表中,我有“审计”列:
- “CreatedBy”表示谁插入数据。
- “创建日期”。
- “UpdatedBy”表示谁更新数据
- “更新日期”。
我在我的 DTO 和我的实体对象中使用一个接口:
public interface ITrackable
{
public string CreatedBy{ get; set; }
public string? UpdatedBy{ get; set; }
public DateTime CreationDate{ get; set; }
public DateTime? UpdateDate{ get; set; }
}
用户“CreatedBy”和“UpdatedBy”来自 JWT 令牌,所以我需要。
我在域层有一项服务,它为我提供来自 JWT 令牌的用户:
public interface IUserService
{
UserModel GetCurrentUser();
}
问题: 每当我使用自动映射器将我的 DTO 对象转换为我的实体时,我必须设置属性“CreatedBy”和“UpdatedBy”:
public void DoSomethingInMyDomainLayer(Something SomethingDTO) //come from Controller
{
var currentUser = _userService.GetCurrentUser();
var myEntity= _mapper.Map<MyEntity>(SomethingDTO);
myEntity.CreatedBy= currentUser.Email; // this code can be found in many places
_datalayer.DoSomething(myEntity)
}
public void DoSomethingElseInMyDomainLayer(SomethingElse SomethingElseDTO) //come from Controller
{
var currentUser = _userService.GetCurrentUser();
var myOtherEntity= _mapper.Map<MyOtherEntity>(SomethingElseDTO);
myOtherEntity.CreatedBy= currentUser.Email; // this code can be found in many places
_datalayer.DoSomethingElse(myOtherEntity)
}
我不想在具有不同实体的所有方法中重复此代码
myEntity.CreatedBy= currentUser.Email
**备注1 **
我不能使用配置文件自动映射器,因为我也会重复:
CreateMap<MyDTO, MyEntity>()
.ForMember(x => x.CreatedBy, opt => CallMyUserServiceToGetUserFromJwtToken);
CreateMap<MyDTO2, MyEntity2>()
.ForMember(x => x.CreatedBy, opt => CallMyUserServiceToGetUserFromJwtToken);
**备注2 **
我想要一种通用映射:
像“如果我的实体是“ITrackable”,我会自动将 UserCreatedBy 映射到我的实体上。
你有什么想法?
谢谢
PS:对不起我的英语,这不是我的母语
解决方案
推荐阅读
- git - `git clone` 如何处理目标目录中的任何现有文件和子目录?
- jenkins - 如何在jenkins中修改xml文件中的xml元素
- python - Python tkinter 覆盖默认 ctrl-h 绑定
- ios - 添加时间到日期选择器日期和时间会导致相同的日期和时间。迅速
- asp.net-mvc - DataContext 初始化给出错误
- xml - xdt 通过子节点属性进行转换
- postgresql - 在一个查询中计算具有不同条件的行
- plot - 在 Julia 中绘制圆方程
- symfony - 重置密码 symfony 4(用户未登录)
- html - 元素无意中移动内容更改