Automapper после сопоставления с существующим объектом, если ядро ​​не может отслеживать изменения - PullRequest
0 голосов
/ 04 января 2019

После извлечения списка объектов (сущностей) из базы данных я хочу обновить эти объекты, но только определенные свойства и сохранить изменения в БД, после того как сопоставление выполнено, оно теряет отслеживание изменений, и контекст не показывает никаких изменений.

Я попытался создать собственный обработчик значений для AutoMapper, и у меня с треском произошел сбой, так как после сопоставления ips по-прежнему равны 0.

Итак, вот фрагмент кода

class A { int id; string Name; }
class B { string Name;} 
List<B> b = new List<B>() { "t", "g" };

var result = ctx.A.ToList();
this.Mapper.Map<IList<B>,IList<A>>(b,result);
ctx.A.SaveChanges();

1 Ответ

0 голосов
/ 04 января 2019

Проблема в том, что вы используете список элементов.

this.Mapper.Map<IList<B>,IList<A>>(b,result);

Говорит, сопоставляет B значения с result значениями ... но не меняет result на новыетип объекта, который это не так.Ничто в этом коде не говорит AutoMapper не изменять элементы в списке .

Это связано с тем, что Automapper не может сопоставлять элементы в b с какими элементами вresult.Кроме того, что он должен делать, если количество элементов отличается?

Вы можете принудительно установить его самостоятельно, используя:

result = result
  .Zip(b, (r,b2) => mapper.Map<B,A>(b2,r) )
  .ToList()

DotNetFiddleExample

...