(精華)2020年7月3日 ASP.NET Core AutoMapper實現類的相互對映(工具版)
需要安裝如下包
AutoMapper
public void ConfigureServices(IServiceCollection services)
{
#region 自動對映擁有MapAttribute的類
services.AddAutoMapper();
#endregion
}
/// <summary>
/// 使用AutoMapper自動對映擁有MapAttribute的類
/// </summary>
/// <param name="services">服務集合</param>
/// <param name="configure">自定義配置</param>
public static IServiceCollection AddAutoMapper(this IServiceCollection services, Action<IMapperConfigurationExpression> configure = null)
{
List<(Type from, Type[] targets)> maps = new List<(Type from, Type[] targets)>();
maps.AddRange(GlobalData.AllFxTypes.Where(x => x.GetCustomAttribute<MapAttribute>() != null)
.Select(x => (x, x.GetCustomAttribute<MapAttribute>().TargetTypes)));
var configuration = new MapperConfiguration(cfg =>
{
maps.ForEach(aMap =>
{
aMap.targets.ToList().ForEach(aTarget =>
{
cfg.CreateMap(aMap.from, aTarget).IgnoreAllNonExisting(aMap.from, aTarget).ReverseMap();
});
});
cfg.AddMaps(GlobalData.AllFxAssemblies);
//自定義對映
configure?.Invoke(cfg);
});
#if DEBUG
//只在Debug時檢查配置
configuration.AssertConfigurationIsValid();
#endif
services.AddSingleton(configuration.CreateMapper());
return services;
}
[Map(typeof(Base_User))]
public class Base_UserDTO : Base_User
{
public string RoleNames { get => string.Join(",", RoleNameList ?? new List<string>()); }
public List<string> RoleIdList { get; set; }
public List<string> RoleNameList { get; set; }
public RoleTypes RoleType
{
get
{
int type = 0;
var values = typeof(RoleTypes).GetEnumValues();
foreach (var aValue in values)
{
if (RoleNames.Contains(aValue.ToString()))
type += (int)aValue;
}
return (RoleTypes)type;
}
}
public string DepartmentName { get; set; }
public string SexText { get => Sex.GetDescription(); }
public string BirthdayText { get => Birthday?.ToString("yyyy-MM-dd"); }
}
/// <summary>
/// 系統使用者表
/// </summary>
[Table("Base_User")]
public class Base_User
{
/// <summary>
/// 主鍵
/// </summary>
[Key, Column(Order = 1)]
public String Id { get; set; }
/// <summary>
/// 建立時間
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 建立人Id
/// </summary>
public String CreatorId { get; set; }
/// <summary>
/// 否已刪除
/// </summary>
public Boolean Deleted { get; set; }
/// <summary>
/// 使用者名稱
/// </summary>
public String UserName { get; set; }
/// <summary>
/// 密碼
/// </summary>
public String Password { get; set; }
/// <summary>
/// 姓名
/// </summary>
public String RealName { get; set; }
/// <summary>
/// 性別
/// </summary>
public Sex Sex { get; set; }
/// <summary>
/// 出生日期
/// </summary>
public DateTime? Birthday { get; set; }
/// <summary>
/// 所屬部門Id
/// </summary>
public String DepartmentId { get; set; }
}
public enum Sex
{
[Description("男人")]
Man = 1,
[Description("女人")]
Woman = 0
}
public class MapAttribute : Attribute
{
public MapAttribute(params Type[] targetTypes)
{
TargetTypes = targetTypes;
}
public Type[] TargetTypes { get; }
}
具體的其他相關類請移到類庫中去查詢本人部落格都有
相關文章
- ASP.NET Core 中的物件對映之 AutoMapperASP.NET物件APP
- .NET CORE AUTOMAPPER 對映一個類的子類APP
- .NET Core Dto對映(AutoMapper)APP
- 在 ASP.NET Core 專案中使用 AutoMapper 進行實體對映ASP.NETAPP
- .NET CORE 中使用AutoMapper進行物件對映APP物件
- (精華)2020年7月2日 ASP.NET Core Castle實現服務注入和AOP(工具版)ASP.NETAST
- (精華)2020年7月22日 ASP.NET Core Swagger的使用(NSwag工具版)ASP.NETSwagger
- (精華)2020年7月1日 ASP.NET Core Swagger的使用(Swashbuckle工具版)ASP.NETSwagger
- ASP.NET Core-自動對映ASP.NET
- 在.net中使用AutoMapper進行物件對映,物件相互轉,簡單方便APP物件
- ASP.NET Core擴充套件庫之實體對映ASP.NET套件
- 【ASP.NET Core】動態對映MVC路由ASP.NETMVC路由
- Javascript - 物件對映automapper介紹JavaScript物件APP
- 在ASP.NET Core MVC 2.2 中使用AutoMapperASP.NETMVCAPP
- asp.net core 3.1.x 中使用AutoMapperASP.NETAPP
- 基於 abp vNext 和 .NET Core 開發部落格專案 - 用AutoMapper搞定物件對映APP物件
- 【5min+】 物件對映只有AutoMapper?試試Mapster物件APP
- (精華)2020年7月15日 ASP.NET Core EFCore分庫分表框架的使用(手寫版)ASP.NET框架
- (精華)2020年7月1日 ASP.NET Core 解決跨域問題(手寫版)ASP.NET跨域
- .net Core 使用AutoMapperAPP
- (精華)2020年7月20日 ASP.NET Core serilog日誌框架的使用ASP.NET框架
- Util應用框架基礎(二) - 物件到物件對映(AutoMapper)框架物件APP
- ASP.NET Core - JWT認證實現ASP.NETJWT
- 基於AbstractProcessor擴充套件MapStruct自動生成實體對映工具類套件Struct
- Java實體對映工具MapStruct詳解JavaStruct
- .Net core 中 AutoMapper的應用APP
- .net core3.1 AutoMapperAPP
- .net core中使用AutomapperAPP
- (精華)2020年9月17日 ASP.NET Core 中介軟體詳解ASP.NET
- (精華)2020年7月21日 ASP.NET Core 容器偽屬性注入ASP.NET
- MyBatis實現一對一關聯對映MyBatis
- Asp.NetCore 3.1 使用AutoMapper自動對映轉換實體 DTO,Data2ViewModelASP.NETNetCoreAPPView
- EntityFramework Core如何對映動態模型?Framework模型
- Java實體對映工具MapStruct使用詳解JavaStruct
- ASP.net core 使用UEditor.Core 實現 ueditor 上傳功能ASP.NET
- .NET Core 中AutoMapper的配置及使用APP
- .Net Core中更高階的AutoMapper示例APP
- (精華)2020年7月21日 ASP.NET Core 模型驗證過濾器ASP.NET模型過濾器