zh_geo通过本文主要向大家介绍了c#等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
public class Doctor
{
public int Id { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class HealthcareProfessional
{
public string FullName { get; set; }
}
public class Person
{
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class KitchenCutlery
{
public int Knifes { get; set; }
public int Forks { get; set; }
}
public class Kitchen
{
public int KnifesAndForks { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Doctor> Doctors { get; set; }
}
public class DbInitializer : DropCreateDatabaseAlways<MyContext>
{
protected override void Seed(MyContext context)
{
context.Doctors.Add(new Doctor
{
FirstName = "Jon",
LastName = "Preece",
Title = "Mr"
});
}
}
1.用AssertConfigurationIsValid判断Mapping是不是非法或有问题
//Arrange
Mapper.CreateMap<Doctor, HealthcareProfessional>();
Mapper.CreateMap<Doctor, HealthcareProfessional>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => string.Join(" ", src.Title, src.FirstName, src.LastName)));
//Assert
Mapper.AssertConfigurationIsValid();
2.自定义Mapping,当member太多的情况下,或者特殊情况可以用自定义Mapper-> ITypeConverter
public class HealthcareProfessionalTypeConverter : ITypeConverter<Doctor, HealthcareProfessional>
{
public HealthcareProfessional Convert(ResolutionContext context)
{
if (context == null || context.IsSourceValueNull)
return null;
Doctor source = (Doctor)context.SourceValue;
return new HealthcareProfessional
{
FullName = string.Join(" ", new[] { source.Title, source.FirstName, source.LastName })
};
}
}
调用
//Arrange
Mapper.CreateMap<Doctor, HealthcareProfessional>()
.ConvertUsing<HealthcareProfessionalTypeConverter>();
3.Value Resolvers允许对mapping的值类型进行变换
public class KitchenResolver : ValueResolver<KitchenCutlery, int>
{
protected override int ResolveCore(KitchenCutlery source)
{
return source.Knifes + source.Forks;
}
}
调用
//Arrange
Mapper.CreateMap<KitchenCutlery, Kitchen>().ForMember(dest => dest.KnifesAndForks, opt => opt.ResolveUsing<KitchenResolver>());
4.Null Substitution, 当值为空时,设置指定值
public void Doctor_TitleIsNull_DefaultTitleIsUsed()
{
//Arrange
Doctor source = new Doctor
{
FirstName = "Jon",
LastName = "Preece"
};
Mapper.CreateMap<Doctor, Person>()
.ForMember(dest => dest.Title, opt => opt.NullSubstitute("Dr"));
//Act
Person result = Mapper.Map<Person>(source);
//Assert
Assert.AreSame(result.Title, "Dr");
}