我有 AutoMapper 的最新 3.1.1 版本。由于某种原因,使用 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>();
我收到源值不能为空的错误。意思是,从数据库返回的联系人为空,这没关系,但 AutoMapper 没有运行 Cotnact 或 ContactId 的条件。在数据库中两者都可以为空。我不得不求助于检查 ForMember 块内的源是否为空。