Имею следующее:
public async Task<bool> Update(CoinEntity coinEntity)
{
var found = await context.Coins.FindAsync(coinEntity.CoinId);
if (found==null)
{
throw new CoinNotFoundException(coinEntity.CoinId);
}
Mapper.Initialize(cfg => cfg.CreateMap<CoinEntity, CoinEntity>());
found = Mapper.Map<CoinEntity>(coinEntity);
await context.SaveChangesAsync();
return true;
}
Это работает в том смысле, что найденное имеет все свойства из переданного, однако я полагаю, потому что .Map создает новый экземпляр. Это больше не отслеживается EFCore, и SaveChanges ничего не изменилось.
Есть ли способ для automapper действительно обновить реальный объект вместо создания нового экземпляра?
Я просто хочу, чтобы мой объект found
по-прежнему отслеживался EF после того, как automapper выполнит его сопоставление.
Я пытаюсь избежать копирования поля за полем, и использование .Attach of EF не вариант, потому что он не работает, так как мне нужно заменить записи дочерней таблицы (удаление некоторых, добавление некоторых)
Вы здесь не используете автомаппер. Вы можете вызвать статическую Initialize только один раз, но делайте это каждый раз, когда вызывается ваш метод. Переместите инициализацию куда-нибудь в начало потока кода. Если это ядро asp.net, вы можете использовать сервис в области видимости automapper вместо статического доступа, который больше подходит для этого сценария.
да, я знаю об этом, это было сделано только для того, чтобы убедиться, что он работает, прежде чем я его перенесу. Спасибо, что указали на это
@AFriend это то, что я ищу, спасибо, ответил на мой вопрос
Возможный дубликат Automapper: обновлять значения свойств без создания нового объекта