我有最新的3.1.1版本的AutoMapper。出于某种原因,使用ForAllMemebers时IsSourceValueNull似乎不起作用或我期望得到不同的结果:
这是我想要做的一个例子。请不要评论与实体完全相同的DTO。这只是我遇到更复杂模型的一个例子。
public class User{
public int Id {get;set;}
public string UserName {get;set;}
public virtual int? ContactId {get;set;} //Foreign Key to contact object
public virtual Contact Contact {get;set;}
}
public class Contact {
public int Id {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
}
public class UserDto {
public int Id {get;set;}
public string UserName {get;set;}
public int? ContactId {get;set;} //Foreign Key to contact object
public ContactDto Contact {get;set;}
}
public class ContactDto {
public int Id {get;set;}
public string FirstName {get;set;}
public string LastName {get;set;}
}
映射的代码如下所示:
AutoMapper.Mapper.CreateMap<User,UserDto>().ForAllMembers(u => u.Condition(s => !s.IsSourceValueNull));
AutoMapper.Mapper.CreateMap<Contact,ContactDto>();
我收到一个错误,即Source Value不能为null。这意味着,从数据库返回的联系人为空,这没关系,但是AutoMapper没有运行Cotnact或ContactId的条件。 DB中的两者都可以为null。我不得不求助于检查ForMember块中的源是否为空。