Экземпляр типа сущности «Пользователь» невозможно отследить, поскольку другой экземпляр с тем же значением ключа для «ИдC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Экземпляр типа сущности «Пользователь» невозможно отследить, поскольку другой экземпляр с тем же значением ключа для «Ид

Сообщение Anonymous »

Я знаю, что вопросы уже задавались, но решения мне не помогли.

Экземпляр типа сущности «Пользователь» невозможно отследить, поскольку другой экземпляр с тем же значением ключа для {'Id'} уже отслеживается. При присоединении существующих сущностей убедитесь, что присоединен только один экземпляр сущности с заданным значением ключа. Рассмотрите возможность использования DbContextOptionsBuilder.EnableSensitiveDataLogging, чтобы увидеть конфликтующие значения ключей.

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

Код: Выделить всё

await _userManager.UpdateAsync(user);
Также я попробовал использовать обновление шаблона репозитория, и оно обновляется правильно.

Код: Выделить всё

public async Task UpdateAsync(TEntity entity)
{
_dbSet.Update(entity);
_context.Entry(entity).State = EntityState.Modified;
}
При использовании Attach не обновляется соединение с классом пользователя (по свойству навигации).

Код: Выделить всё

public async Task UpdateAsync(TEntity entity)
{
_dbSet.Attach(entity);
_context.Entry(entity).State = EntityState.Modified;
}
Что я делаю не так? Я думаю, что класс Identity должен работать правильно.
ОБНОВЛЕНИЕ:
Решение заключалось в том, что я попытался связать таблицы из базы данных с основной один (например, категории для пользователей) и работать с ними (что неправильный подход). Вы должны следовать принципу получать только то, что вам нужно в данный момент (если вам нужно обновить категорию, не обязательно делать это через подключенного пользователя). То есть получать из базы только то, что будет обработано. В противном случае это приведет к аналогичным ошибкам. Конкретно этот еще и заключался в том, что мои DTO были настроены не одинаково и хранили там экземпляры одного и того же пользователя, что и вызывало конфликт.
Неправильный DTO:

Код: Выделить всё

class ExampleCategoryDTO
{
public int Id { get; set; }
public string Name { get; set; }

public virtual IList Users { get; set; } --- wrong
}
Неправильная работа с данными:

Код: Выделить всё

var tmp = context.Include(x => x.Categories).Users.ToList();
// Imagine we're changing some "tmp" variable data in categories
context.Update(tmp);
context.SaveChanges();
Спасибо тем, кто пытался помочь, и извините за недостаток информации (не очень понял, откуда возникла проблема)

Подробнее здесь: https://stackoverflow.com/questions/726 ... nstance-wi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»