163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|||||||||||
1 | |||||||||||
ASP.NET Core: не работает метод Update EF после Automapper28.04.2017, 08:54. Показов 2871. Ответов 10
Метки нет (Все метки)
Собственно вот. При сохранении записи в базу данных выдает исключение, что данный экземпляр объекта не отслеживается. Поле Id не имеет значение Default, поэтому EF не может понять переписать существующую запись с таким же Id или создать новую.
Собака порылась в Automapper. Если опишем метод вот так:
Раньше у меня было обычное веб-приложение. Сейчас контроллер у меня WebAPI. Может в этом причина?
0
|
28.04.2017, 08:54 | |
Ответы с готовыми решениями:
10
ASP.NET Core + AngularJs. Не работает метод success сервиса $http ASP.NET Core. Старт - что нужно знать, чтобы стать ASP.NET Core разработчиком? ASP.NET Core + EF Core: ошибка при обновлении БД после создания миграции Разница между ASP.NET Core 2, ASP.NET Core MVC, ASP.NET MVC 5 и ASP.NET WEBAPI 2 |
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,641
|
|
28.04.2017, 09:03 | 2 |
yurickas, о боже. Вы Automapper иниицализируете в каждом методе, где его используете?..
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
28.04.2017, 09:17 [ТС] | 3 |
Нет. Когда все было написано одной сточкой и работало недели 2 назад, то все было красиво и Automapper инициировался там где нужно.
Когда я добавил запись в БД - тоже все было хорошо. Но когда я попытался изменить запись в БД - получил ошибку сервера. А когда получил - начал забивать костыли, шоб это все заработало и понять где поломалось. Пока что придумать не могу где поломалось. Раньше EF прекрасно сохранял изменения в БД после Automapper и ему было все-равно вытянул я запись из репозитория, изменил и отправил на сохранение, или создал новый экземпляр заполнил и отправил на сохранение.
0
|
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,641
|
|
28.04.2017, 11:59 | 4 |
yurickas, можете сотворить минимальный рабочий пример, где ошибка воспроизводится? Или свой текущий проект очистить от всего лишнего, оставив скелет, и выложить на форум. Ибо так сложно что-то сказать.
0
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|||||||||||
29.04.2017, 07:47 [ТС] | 5 | ||||||||||
напишу следующий контроллер, выложу.
Добавлено через 17 часов 16 минут Вот такое описание к ошибке. The instance of entity type 'DirectoryUnit' cannot be tracked because another instance of this type with the same key is already being tracked. When adding new entities, for most key types a unique temporary key value will be created if no key is set (i.e. if the key property is assigned the default value for its type). If you are explicitly setting key values for new entities, ensure they do not collide with existing entities or temporary values generated for other new entities. When attaching existing entities, ensure that only one entity instance with a given key value is attached to the context. Вот контроллер
0
|
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,641
|
|
29.04.2017, 08:38 | 6 |
yurickas, у вас репозиторий, видимо, представлен синглтоном. Создавайте экземпляр репозитория и контекста на запрос, а не на всё приложение. Используйте метод
AsNoTracking() для получения сущностей без сохранения их в кэше.
1
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
29.04.2017, 08:45 [ТС] | 7 |
Да, синглтоном. А теперь можно повторить тоже самое, но для людей со средним техническим образованием?
0
|
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,641
|
|
29.04.2017, 08:55 | 8 |
yurickas, время жизни контекста и репозитория должно быть ограничено запросом. Т.е. не надо использовать синглтон.
По AsNoTracking можно и погуглить.
1
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
29.04.2017, 09:01 [ТС] | 9 |
А чем тогда пользоваться? Был
AddTransient , но тогда на WebAPI запросы как-то непонятно выполняются. А кроме них я и не знаю больше.нашёль!!! AddScoped ?
0
|
12083 / 8391 / 1283
Регистрация: 21.01.2016
Сообщений: 31,641
|
|
29.04.2017, 09:06 | 10 |
Сообщение было отмечено yurickas как решение
Решение
yurickas, вам нужно настроить DI контейнер на Scoped для репозитория. Непонятность выполнения запросов связана с неправильным использованием EF и кривизной кода.
1
|
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
|
|
29.04.2017, 09:11 [ТС] | 11 |
Все, заработало. Щас плюсов накидаю.
0
|
29.04.2017, 09:11 | |
29.04.2017, 09:11 | |
Помогаю со студенческими работами здесь
11
Какая разница между ASP .Net Core и ASP .Net Core MVC? ASP.NET Core. Форма не работает с кириллицей ASP.NET Core Не собирается проект после обновления NuGet ASP .NET MVC. Core 2.1. Не работает страница веб-приложения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |