Другой экземпляр объекта вызывает ошибку при обновленииC#

Место общения программистов C#
Ответить
Anonymous
 Другой экземпляр объекта вызывает ошибку при обновлении

Сообщение Anonymous »

В моем API с net9 и основной фреймворком у меня есть модель для клиента , которая имеет отношения, многие со многими с модельным каналом .

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

public class Client
{
[Key]
public long ID { get; set; }
}

public class Channel
{
[Key]
public long ID { get; set; }
public string? Name { get; set; }
public ICollection? Client { get; set; }
}
< /code>
После миграции база данных имеет структуру новой таблицы, как я ожидаю < /p>
 
и я могу добавить новые значения, используя основное значение Entity Framework 
. Проблема начинается, когда я хочу обновить значения.
У меня есть API, положить глагол, если быть точным, который получает объект клиента как параметр с Все детали. Итак, сначала я прочитал объект из базы данных, включая каналы

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

var localClient = await db.Client.AsNoTracking()
.Include(c => c.Channels)
.FirstOrDefaultAsync(model => model.ID == id);
< /code>
Тогда я сопоставляю параметр с данными из базы данных < /p>
localClient = mapper.Map(client);
, а затем я обновляю каналы , используя значения из параметра

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

localClient.Channels?.Clear();
if (client.Channels != null)
{
var listChannels = client.Channels.ToList();
foreach (Channel ch in listChannels)
{
var l = await db.Channels.Where(c => c.ID == ch.ID).FirstOrDefaultAsync();
if (l != null)
if (localClient.Channels!.Count(c => c.ID == l.ID) == 0)
localClient.Channels?.Add(l);
}
}
Если я осмотрю объект LocalClient , существуют только уникальные каналы и отсутствие дублирования. Когда я хочу сохранить, используя < /p>
db.Attach(client);
< /code>
сразу же я получу эту ошибку < /p>

Экземпляр типа объекта 'канал' не может быть отслеживается, потому что
Другой экземпляр с тем же значением ключа для {'id'} уже отслеживается
. При прикреплении существующих объектов убедитесь, что прикреплен только один экземпляр
с заданным значением ключа. Подумайте об использовании
'dbcontextoptionsbuilder.enablessIvisitiveAtalogging ', чтобы увидеть противоречивые значения ключей
ошибка. Я проверил свои старые проекты и использую аналогичный процесс.

Подробнее здесь: https://stackoverflow.com/questions/794 ... hen-update
Ответить

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

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

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

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

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