Tag: #automapper

如何使用AutoMapper深度克隆包含IList属性的对象

我正在尝试使用AutoMapper深度克隆以下类: public class MainData { public MainData() { Details = new List(); } public int Id { get; private set; } public DateTime LastUpdate { get; private set; } public IList Details { get; private set; } public int Prop1 { get; set; } public int Prop2 { get; set; } public void AddDetail(Detail detail) […]

如何在代码外定义AutoMapper映射,即在XML文件中或使用不同的方法进行完全可配置的对象映射?

编辑:最初我打算使用AutoMapper来实现我的目标,但我必须知道AutoMapper并不打算以这种方式工作。 它为您提供了创建配置文件的可能性,但在我的情况下(完全可配置)我需要为每个参数组合一个配置文件,所以我想出了一个自己的方法,看看答案。 从AutoMapper wiki我学会了创建一个简单的映射 Mapper.CreateMap().ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Title)); Mapper.CreateMap().ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.EventDate.Date)); Mapper.CreateMap().ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.EventDate.Hour)); Mapper.CreateMap().ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.EventDate.Minute)); 像两个class public class CalendarEvent { public DateTime EventDate; public string Title; } public class CalendarEventForm { public DateTime EventDate […]

Automapper创建新实例而不是地图属性

这是一个漫长的过程。 所以,我有一个模型和一个viewmodel,我正在从AJAX请求更新。 Web API控制器接收viewmodel,然后我使用AutoMapper更新现有模型,如下所示: private User updateUser(UserViewModel entityVm) { User existingEntity = db.Users.Find(entityVm.Id); db.Entry(existingEntity).Collection(x => x.UserPreferences).Load(); Mapper.Map(entityVm, existingEntity); db.Entry(existingEntity).State = EntityState.Modified; try { db.SaveChanges(); } catch { throw new DbUpdateException(); } return existingEntity; } 我为User – > UserViewModel(和back)映射配置了自动配置。 Mapper.CreateMap().ReverseMap(); (注意,明确设置相反的地图并省略ReverseMap表现出相同的行为) 我遇到的Model / ViewModel成员是一个不同对象的ICollection问题: [DataContract] public class UserViewModel { … [DataMember] public virtual ICollection UserPreferences { […]

使用AutoMapper自定义映射

我有两个非常简单的对象: public class CategoryDto { public string Id { get; set; } public string MyValueProperty { get; set; } } public class Category { public string Id { get; set; } [MapTo(“MyValueProperty”)] public string Key { get; set; } } 使用AutoMapper将CategoryDto映射到CategoryDto时,我想要以下行为: 除了具有MapTo属性的属性之外,应该像往常一样映射属性。 在这种情况下,我必须读取Attribute的值来查找target属性。 source属性的值用于在destination属性中查找要注入的值(借助字典)。 一个例子总是好于1000字…… 例: Dictionary keys = new Dictionary { { “MyKey”, “MyValue” […]

如何让AutoMapper处理自定义命名约定?

在我正在开发的项目中,我们将自动生成的DTO映射到业务对象。 数据库具有不同寻常的(但大致一致的)命名约定,这意味着可以将大多数DTO属性名称转换为其等效的业务对象属性名称,从而节省了许多代码行。 例如,在DTO(和数据库)中,我们有一个名为account_ID__created的属性,该属性将映射到名为CreatedAccountId的BO属性。 这是在MemberNameTransformer.GetBoMemberName()发生的一种转换,因此它不像具有不同分隔符的略微不同的约定那样简单。 按照我在AutoMapper源代码中提供的内容,我将此作为我的最佳猜测: public class DtoBoMappingOptions : IMappingOptions { public INamingConvention SourceMemberNamingConvention { get { return new PascalCaseNamingConvention(); } set { throw new NotImplementedException(); } } public INamingConvention DestinationMemberNamingConvention { get { return new PascalCaseNamingConvention(); } set { throw new NotImplementedException(); } } public Func SourceMemberNameTransformer { get { return s => s; […]

Dictionary 使用Automapper映射到对象

下面的代码只针对这个问题 我正在上课 public User class { public string Name{get;set;} public string Age{get;set; } 我有一本字典 Dictionary data= new Dictionary(); data.Add(“Name”,”Rusi”); data.Add(“Age”,”23″); User user= new User(); 现在我想使用Automapper将User对象Automapper到此dictionary 。 Automapper映射对象的属性,但在我的例子中有一个字典和对象。 所以,请建议我怎么做

自动映射 – 它是否只能映射源和目标对象中的现有属性?

我有一个简单的更新function: public void Update(Users user) { tblUserData userData = _context.tblUserDatas.Where(u => u.IDUSER == user.IDUSER).FirstOrDefault(); if (userData != null) { Mapper.CreateMap(); userData = Mapper.Map(user); _context.SaveChanges() } } userData是一个EF实体,它的Entity Key属性被取消,因为我相信它存在于目标对象中,但不存在于源对象中,因此它将使用其默认值进行映射(对于Entity Key,它为null ) 所以,我的问题是,Automapper是否可以配置为仅尝试映射源对象和目标对象中存在的属性? 我想要跳过实体键和导航属性之类的东西。

AutoMapper AssertConfigurationIsValid是否足以确保良好的映射?

我想问你一个关于AutoMapper的问题。 我们正在对我们的映射进行unit testing: var dtoFiltrePersonne = new DtoFiltrePersonne { Prop1 = “Test”, Prop2 = 1234 }; Mapper.CreateMap(); var filtrePersonne = DtoAutoMappeur.Instance.MapFromDtoToEntity(dtoFiltrePersonne); Assert.AreEqual(dtoFiltrePersonne.Prop1, filtrePersonne.Prop1); Assert.AreEqual(dtoFiltrePersonne.Prop2, filtrePersonne.Prop2); 我想知道这个unit testing是否提供相同的覆盖范围? Mapper.CreateMap(); AutoMapper.AssertConfigurationIsValid() 我查看了AutoMapper配置文档 ,对我来说不是很清楚。 我是否需要对每个映射进行unit testing或只使用AssertConfigurationIsValid方法?

使用AutoMapper获取exception

我正在测试一个方法,该方法使用automapper将一个类从我的域映射到一个linq到sql类。 粗略地,类和映射在下面(SupplierEligibilityAllocated是L2S自动生成的类)。 public class SupplierEligibilityTransactionByQuantity { public decimal Eligibility { get; private set; } public decimal CoreValue { get; private set; } public int? TransactionId { get; private set; } public SupplierTransactionStatus Status { get; private set; } public int? DebitId { get; set; } public int ManifestId { get; private set; } } public […]

为什么AutoMapper有一个看似更强大的ValueResolver时会有一个IValueFormatter?

它看起来像IValueFormatter获取type类型的值并返回string类型的值,而ValueResolver获取任何类型的值并返回任何类型的值。 所以,它更灵活。 还有一个问题是,使用ValueResolver ,您永远不需要将源转换为特定类型 – 您可以在类定义中明确定义它。 鉴于此,为什么要使用IValueFormatter ? 它是否可以执行ValueResolver无法完成的任何操作? 我误解了它是如何工作的吗?