Хорошо, я надеюсь, что я просто как-то игнорирую очевидное. Ниже приведена следующая ситуация с кодом. По какой-то причине свойство SequenceNo по-прежнему отображается, хотя я вызываю Ignore(). Я использую последнее. Я также тестировал его с двумя разными классами в одном проекте, и, похоже, он работал, поэтому что случилось с этим сценарием?AutoMapper Ignore() Issue
Это объект домена:
public class CableID
{
private string _panelID1;
public string PanelID1
{
get { return _panelID1; }
private set { _panelID1 = value; }
}
private string _panelID2;
public string PanelID2
{
get { return _panelID2; }
private set { _panelID2 = value; }
}
private int _sequenceNo;
public int SequenceNo
{
get { return _sequenceNo; }
private set { _sequenceNo = value; }
}
private DateTime _inService;
public DateTime InService
{
get { return _inService; }
set { _inService = value; }
}
private string _id;
public string ID
{
get { return _id; }
private set { _id = value; }
}
public CableID(string panelID1, string panelID2, int sequenceNo)
{
this.PanelID1 = panelID1;
this.PanelID2 = panelID2;
this.SequenceNo = sequenceNo;
this.ID = string.Format("({0}-{1}){2}", this.PanelID1, this.PanelID2, this.SequenceNo);
}
public CableID(string id)
{
if (string.IsNullOrEmpty(id))
throw new ArgumentNullException("id");
this.ID = id;
}
}
А вот DTO объекта:
public class CableIDDTO
{
private string _panelID1;
public string PanelID1
{
get { return _panelID1; }
set { _panelID1 = value; }
}
private string _panelID2;
public string PanelID2
{
get { return _panelID2; }
set { _panelID2 = value; }
}
private int _sequenceNo;
public int SequenceNo
{
get { return _sequenceNo; }
set { _sequenceNo = value; }
}
private string _id;
public string ID
{
get { return _id; }
set { _id = value; }
}
public CableIDDTO()
{ }
public CableIDDTO(string panelID1, string panelID2, int sequenceNo)
{
this.PanelID2 = panelID1;
this.PanelID1 = panelID2;
this.SequenceNo = sequenceNo;
this.ID = string.Format("({0}-{1}){2}", this.PanelID2, this.PanelID1, this.SequenceNo);
}
}
И, наконец, AutoMapper вариант использования:
CableID cableID = new CableID("A1", "B1", 2);
Mapper.CreateMap<CableID, CableIDDTO>()
.ForMember(dest => dest.SequenceNo, opt => opt.Ignore());
CableIDDTO dto = Mapper.Map<CableID, CableIDDTO>(cableID);
dto.SequenceNo = 2, когда, так как я установил Пропускать() должно быть 0.
Вы прибил его! Это было неинтуитивно и честно не имеет большого смысла. Почему он захватывает тот, когда доступен конструктор без параметров? Что, если было три или четыре перегруженных конструктора? – bjhuffine
Я не уверен - сегодня я займу некоторое время и просмотрю исходный код AutoMapper, чтобы узнать, могу ли я узнать –
@bjhuffine: добавлена еще одна информация, надеюсь, что это поможет. Я понятия не имел, что существовал до твоего вопроса! –