Копирование данных модели

108
08 февраля 2021, 06:40

Делаю обычный CRUD контроллер. Просто не делал этого на ASP раньше. Вот я загрузил модель допустим:

[HttpPost("update")]
public async Task Update(int id, [FromBody] Person newModel)
{
    using (var db = new ApplicationContext())
    {
        var model = await db.Persons.Where(p => p.Id == id).FirstAsync();
    }
}

Подскажите как мне теперь данные перекинуть из модели полученной запросом в модель которую я достал из базы? Можно конечно просто присвоить все поля вручную, но мне кажется или это такое себе решение? А если бы у меня полей было 10+? Неудобно же...

Answer 1

EntityFramework отслеживает состояние всех своих объектов во внутренних списках и реагирует на них. Надо EntityFramework сказать явно переписать состояние внутреннего объекта на внешний. Делается это методом Attach:

[HttpPost("update")]
public async Task Update(int id, [FromBody] Person newModel)
{
   using (var db = new ApplicationContext())
   {        
     db.Persons.Attach(newModel);
     db.ObjectStateManager.ChangeObjectState(newModel, EntityState.Modified);
     await db.SaveChangesAsync();
  }
}
READ ALSO
Как определить класс с интерфейсом так, что бы он имел методы интерфейса, но без их реализации

Как определить класс с интерфейсом так, что бы он имел методы интерфейса, но без их реализации

Что я имел ввиду в заголовке, так это то, что бы к примеру абстрактный класс, мог стать контейнером некого интерфейса, и что бы при обращении...

103
Исключить из коллекции элементы input type=“hidden”

Исключить из коллекции элементы input type=“hidden”

На сайте есть 6 видимых и 2 невидимых поляМне необходимо добавить в коллекцию только видимые

103
как прочесть в c# XML документ? [дубликат]

как прочесть в c# XML документ? [дубликат]

Уважаемые знатоки! как на СиШарпе, прочитать ХМЛ файл такого рода:

120
Модификаторы virtual и override

Модификаторы virtual и override

Пусть имеется 3 класса A B и CB наследуется от А, а C в свою очередь от B, следовательно B получит всё что есть у A, а C получит всё от A и B

125