ValueInjecter ViewModel в EF poco

У меня есть следующая ViewModel:

public class MessageViewModel
{
    public string Text { get; set; }
    public int ContactID { get; set; }
}

public class Message
{
    public string Text { get; set; }

    [ForeignKey("Contact")]
    public int ContactID { get; set; }
    public Contact Contact { get; set; }
}

public class Contact
{
    public int ID { get; set; }
    public string Name { get; set; } 
}

Я использую ValueInjecter для сопоставления:

 MessageViewModel = new MessageViewModel{ ContactID = 42 };
 Message msg = new Message();
 msg.InjectFrom<UnflatLoopValueInjection>(viewModel);

Но ValueInjecter устанавливает msg.ContactID и msg.Contact.ID. Как я могу этого избежать?


person LuckyStrike    schedule 18.10.2014    source источник
comment
Покажите нам класс Contact. Вы говорите, что он пытается сопоставить model.Contact.ID, а вы этого не хотите? Какой идентификатор вы хотите сопоставить?   -  person Robert Harvey    schedule 18.10.2014
comment
Я добавил класс Contact. Я пытаюсь сопоставить только модель.ContactID.   -  person LuckyStrike    schedule 18.10.2014
comment
Зачем вам нужен класс Model? Все, что он делает, это создает ненужный уровень абстракции и усложняет ситуацию, требуя от вас поддерживать два идентификатора, а не один.   -  person Robert Harvey    schedule 18.10.2014
comment
Я отредактировал пример. ContactID — это внешний ключ для Contact. В представлении у меня есть DropDown, который возвращает значение идентификатора.   -  person LuckyStrike    schedule 18.10.2014
comment
чтобы избежать msg.ContactID для msg.Contact.ID, посмотрите этот ответ stackoverflow.com/a/27444756/112100   -  person Omu    schedule 12.12.2014


Ответы (2)


Пытаться

msg.InjectFrom<FlatLoopValueInjection>(viewModel);

То, что вы получаете, является ожидаемым поведением.

выравнивание, развертка

person beautifulcoder    schedule 18.10.2014
comment
Я думаю, что разглаживание - правильное соглашение. Я только хочу избежать сопоставления внешних ключей. - person LuckyStrike; 18.10.2014

если вы хотите сопоставить только с model.Text и model.ContactID, сделайте следующее:

msg.InjectFrom(viewModel);

Contact.ID заполнялся, потому что вы использовали Unflattening, поэтому из source.ContactID он собирался target.Contact.ID

чтобы избежать этого (игнорировать определенные свойства), посмотрите здесь https://stackoverflow.com/a/27444756/112100

person Omu    schedule 19.10.2014
comment
Мне нужно разоблачение. Но для кода Entity Framework сначала мне нужен только ContactID, а не пустой объект Contact. - person LuckyStrike; 20.10.2014