Я начал новый основной проект asp.net. Как вы знаете, в Core версии 2.1 есть внедрение зависимостей.
У меня есть модель под названием MenuModel для создания таблицы в моей базе данных. Я добавил интерфейс под названием IMenuRepository для моей модели и вызов класса MenuRepository, который реализует мой интерфейс.
Я пытаюсь отредактировать свое меню в своем хранилище следующим образом:
public async Task Edit(Menu menu)
{
menu.UpdatedBy = _userId;
menu.UpdatedDate = DateTime.Now;
_db.Entry(menu).State = EntityState.Modified;
await _db.SaveChangesAsync();
}
Я добавил эту строкукод для моего startup.cs для внедрения зависимостей
services.AddTransient<IMenuRepository, MenuRepository>();
Я нашел другой вопрос, который задал тот же вопрос, и в ответ сказано, что я должен изменить свой код startup.cs, например:
services.AddScoped<IMenuRepository, MenuRepository>();
Я сделал и попробовал другие, но я получаю эту ошибку всегда. Я искал пару раз, но не могу найти решение своей проблемы.
Однажды я отсоединил свою модель от DatabaseContext перед редактированием, и я тоже получил ту же ошибку.
Я попытался с помощью этого кода обновить, но безрезультатно
_db.Update(menu);
Вот мое описание ошибки:
** Произошло необработанное исключение при обработке запроса.
InvalidOperationException:Экземпляр типа объекта «Меню» не может быть отслежен, потому что другой экземпляр с таким же значением ключа для {'MenuId'} уже отслеживается. При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с данным значением ключа. Подумайте об использовании DbContextOptionsBuilder.EnableSensitiveDataLogging, чтобы увидеть конфликтующие значения ключей. Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap.ThrowIdentityConflict (запись InternalEntityEntry) **
С другой стороны, у меня есть часть кода для публикации и отмены публикации меню, которое изменяет статус записи и редактирует менювот так и работает отлично.
public async Task Publish(int id)
{
Menu menu = await Find(id);
menu.UpdatedBy = _userId;
menu.UpdatedDate = DateTime.Now;
menu.Status = eStatus.Published;
_db.Entry(menu).State = EntityState.Modified;
}
Разница только в том, что я отправляю идентификатор меню для публикации метода и отправляю меню obj для редактирования.