c# - .net 泛型和 AutoMapper 的挑战
问题描述
我下面有一个界面
public interface IEntity<T>
{
T Id { get; set; }
DateTime Created { get; set; }
DateTime Updated { get; set; }
[Timestamp] byte[] RowVersion { get; set; }
}
这个接口是由一个类实现的
public partial class UrlRec: IEntity<Int64>
{
public int EntityId { get; set; }
public string EntityName { get; set; }
public string Slug { get; set; }
public bool IsActive { get; set; }
public int LanguageId { get; set; }
public long Id { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
[Timestamp] public byte[] RowVersion { get; set; }
}
我为 UrlRecModel 类创建了一个 ViewModel。如何使用 AutoMapper 将 ViewModel 的通用扩展方法写入类,反之亦然。
这是我的视图模型
public partial class UrlRecordModel : BaseIbileHubEntityModel
{
#region Properties
[IbileHubResourceDisplayName("Admin.System.SeNames.Name")]
public string Name { get; set; }
[IbileHubResourceDisplayName("Admin.System.SeNames.EntityId")]
public int EntityId { get; set; }
[IbileHubResourceDisplayName("Admin.System.SeNames.EntityName")]
public string EntityName { get; set; }
[IbileHubResourceDisplayName("Admin.System.SeNames.IsActive")]
public bool IsActive { get; set; }
[IbileHubResourceDisplayName("Admin.System.SeNames.Language")]
public string Language { get; set; }
[IbileHubResourceDisplayName("Admin.System.SeNames.Details")]
public string DetailsUrl { get; set; }
#endregion
}
解决方案
我已经创建了这两种扩展方法。
public static IEntity<T> ToModel<T>(this IEntityViewModel<T> viewModel)
{
return (IEntity<T>)Mapper.Map(viewModel, viewModel.GetType(), typeof(IEntity<T>));
}
public static IEntityViewModel<T> ToViewModel<T>(this IEntity<T> entity)
{
return (IEntityViewModel<T>)Mapper.Map(entity, entity.GetType(), typeof(IEntityViewModel<T>));
}
我在这里用过。
IEntityViewModel<Int64> entityViewModel = urlRec.ToViewModel<Int64>();
IEntity<Int64> entity = entityViewModel.ToModel<Int64>();
我不知道您的视图模型看起来如何,所以我创建了一个测试视图模型和界面。
public interface IEntityViewModel<T>
{
T Id { get; set; }
DateTime Created { get; set; }
DateTime Updated { get; set; }
byte[] RowVersion { get; set; }
}
public class UrlRecViewModel : IEntityViewModel<Int64>
{
public int EntityId { get; set; }
public string EntityName { get; set; }
public string Slug { get; set; }
public bool IsActive { get; set; }
public int LanguageId { get; set; }
public long Id { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
public byte[] RowVersion { get; set; }
}
推荐阅读
- python - 无法同步数据库,因为 CASCADE() 缺少参数
- angular - Angular 7不将发布数据发送到api
- c++ - c++ socket accept() 使用 epoll 获取资源死锁避免 errno
- javascript - 对对象数组进行排序,但第一位是固定的
- matlab - 在 3D 矩阵中查找具有特定值的簇
- c# - 如何在选择游戏对象时将材质分配给游戏对象,并在使用 C# 取消选择游戏对象时将其更改回原始材质?
- facebook - 如何让 Facebook 的访问令牌显示我的页面提要?
- google-cloud-platform - 指定 Cloud Vision 请求的输出文件名
- c# - 刚体移动时,刚体速度有时为零
- python - Flask Restplus API 的 Swagger UI 中出现错误 401