Sup*_*JMN 5 .net c# automapper
我有一个DTO,我想映射到一个实体。实体具有一些用属性修饰的MaxLength属性。
我希望AutoMapper在根据MaxLength每个属性映射到我的实体时截断来自DTO的所有字符串,这样在保存实体时不会出现验证错误。
因此,如果实体是这样定义的:
public class Entity
{
[MaxLength(10)]
string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想这样做:
var myDto = new MyDto() { Name = "1231321312312312312312" };
var entity = Mapper.Map<Entity>(myDto);
Run Code Online (Sandbox Code Playgroud)
结果entity应Name限制为最多10个字符。
我不确定这是放置该逻辑的好地方,但这里有一个适合您的情况的示例(AutoMapper 4.x):Custom Mapping with AutoMapper
在此示例中,我正在读取MapTo实体上的自定义属性,您可以对MaxLength.
这是当前版本 AutoMapper (6.x) 的完整示例
class Program
{
static void Main(string[] args)
{
Mapper.Initialize(configuration =>
configuration.CreateMap<Dto, Entity>()
.ForMember(x => x.Name, e => e.ResolveUsing((dto, entity, value, context) =>
{
var result = entity.GetType().GetProperty(nameof(Entity.Name)).GetCustomAttribute<MaxLengthAttribute>();
return dto.MyName.Substring(0, result.Length);
})));
var myDto = new Dto { MyName = "asadasdfasfdaasfasdfaasfasfd12" };
var myEntity = Mapper.Map<Dto, Entity>(myDto);
}
}
public class Entity
{
[MaxLength(10)]
public string Name { get; set; }
}
public class Dto
{
public string MyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |