1

我有 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 块内的源是否为空。

4

0 回答 0