我们正在使用Automapper进行项目,并且似乎随机获得以下错误:
AutoMapper.AutoMapperConfigurationException:找到未映射的成员.查看下面的类型和成员.添加自定义映射表达式,忽略,添加自定义解析程序或修改源/目标类型
代码在几个月内没有改变.我收到错误,刷新,错误消失,页面工作正常.我正在使用
Mapper.AssertConfigurationIsValid();
Run Code Online (Sandbox Code Playgroud)
不知道为什么它抱怨映射不好然后刷新再次没问题,有没有人碰到这个?调试没有帮助,因为它是随机的,有时没有错误,然后其他日子它将在网站的某个地方弹出,回到它并且没关系.错误也出现在随机页面上,而不是相同的页面,而不是相同的映射.
我有以下域对象:
public class DomainClass
{
public int Id { get; set; }
public string A { get; set; }
public string B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有以下两个要映射到的对象:
public class Parent
{
public int Id { get; set; }
public string A { get; set; }
public Child Child { get; set; }
}
public class Child
{
public int Id { get; set; }
public string B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我设置了以下地图:
Mapper.CreateMap<DomainClass, Parent>();
Mapper.CreateMap<DomainClass, Child>();
Run Code Online (Sandbox Code Playgroud)
如果我使用以下调用映射我的对象,则parent.Child属性为null.
var …Run Code Online (Sandbox Code Playgroud) 我有以下Automapper定义:
Mapper.CreateMap<IB.BusinessComponents.Data.LocationMaster, IB.Entites.Master.Location>();
Mapper.CreateMap<IB.BusinessComponents.Data.LocationMaster, IB.Entites.Master.Location>()
.ForMember(destination => destination.Id, source => source.MapFrom(item => item.LocationMasterID))
.ForMember(destination => destination.ChildLocationList, source => source.Ignore());
Run Code Online (Sandbox Code Playgroud)
当我映射单个对象时,这很好用.但我似乎无法传递对象列表.传入列表时是否需要不同的定义,或者不可能?
忽略ResolveUsing采用IValueResolver 的重载,并仅查看这两种方法:
void ResolveUsing(Func<TSource, object> resolver);
void MapFrom<TMember>(Expression<Func<TSource, TMember>> sourceMember);
Run Code Online (Sandbox Code Playgroud)
这两者之间的主要区别似乎是ResolveUsinga Func<TSource, object>,而MapFrom需要a Expression<Func<TSource, TMember>>.
但是,在实际上使用lambda表达式的这些方法之一的客户端代码中,它们似乎是可互换的:
Mapper.CreateMap<SourceType, DestType>() // uses ResolveUsing
.ForMember(d => d.DestPropX, o => o.ResolveUsing(s => s.SourcePropY));
Mapper.CreateMap<SourceType, DestType>() // uses MapFrom
.ForMember(d => d.DestPropX, o => o.MapFrom(s => s.SourcePropY));
Run Code Online (Sandbox Code Playgroud)
那么上述两种选择之间最终的区别是什么呢?一个比另一个快吗?一个是比另一个更好的选择,如果是,何时/为什么?
我有一个面向公众的界面,我试图将两个不同的枚举映射到彼此.我试着使用以下代码:
Mapper.CreateMap<Contract_1_1_0.ValidationResultType, Common.ValidationResultType>();
Run Code Online (Sandbox Code Playgroud)
当那不起作用时,我试过:
Mapper.CreateMap<Contract_1_1_0.ValidationResultType, Common.ValidationResultType>().ConvertUsing(x => (Common.ValidationResultType)((int)x));
Run Code Online (Sandbox Code Playgroud)
但这似乎也不起作用.反正有没有让automapper来处理这种情况?
我有两个类,所以:
public class SentEmailAttachment : ISentEmailAttachment
{
public SentEmailAttachment();
public string FileName { get; set; }
public string ID { get; set; }
public string SentEmailID { get; set; }
public string StorageService { get; set; }
public string StorageServiceFileID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
public class SentEmailAttachmentItem : ISentEmailAttachment
{
[ItemName]
public string ID { get; set; }
public string SentEmailID { get; set; }
public string FileName { get; set; }
public string StorageService { get; set; …Run Code Online (Sandbox Code Playgroud) 我有这些课程:
public class Person {
public int Id{ get; set ;}
public string FirstName{ get; set ;}
public string LastName{ get; set ;}
}
public class PersonView {
public int Id{ get; set ;}
public string FirstName{ get; set ;}
public string LastName{ get; set ;}
}
Run Code Online (Sandbox Code Playgroud)
我定义了这个:
Mapper.CreateMap<Person, PersonView>();
Mapper.CreateMap<PersonView, Person>()
.ForMember(person => person.Id, opt => opt.Ignore());
Run Code Online (Sandbox Code Playgroud)
这是有用的:
PersonView personView = Mapper.Map<Person, PersonView>(new Person());
Run Code Online (Sandbox Code Playgroud)
我想做同样但List<Person> to List<PersonView>但是我没有找到正确的语法.
谢谢
ForAllOtherMembers 扩展方法已从 Automapper 11 中删除,我使用它来忽略除前面提到的属性之外的属性的常规映射,如下所示
ForAllOtherMembers(opt=>opt.ignore())
Run Code Online (Sandbox Code Playgroud)
如何在 Automapper 11 中执行此操作?
我已经开始使用https://github.com/robconery/massive进行项目,我想知道是否有任何映射工具允许支持动态到静态类型映射?
我之前使用过AutoMapper,AutoMapper是否支持此功能?
我知道AutoMapper中的DynamicMap函数,但我相信这个函数用于运行地图而不先创建Map.在我下面的例子中,它不起作用.
dynamic curUser = users.GetSingleUser(UserID);
var retUser = Mapper.DynamicMap<UserModel>(curUser);
users.GetSingleUser(UserID); // returns a dynamic object
Run Code Online (Sandbox Code Playgroud)