Код: Выделить всё
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);
}
}
db.Attach(client);
< /code>
сразу же я получу эту ошибку < /p>
Экземпляр типа объекта 'канал' не может быть отслеживается, потому что
Другой экземпляр с тем же значением ключа для {'id'} уже отслеживается
. При прикреплении существующих объектов убедитесь, что прикреплен только один экземпляр
с заданным значением ключа. Подумайте об использовании
'dbcontextoptionsbuilder.enablessIvisitiveAtalogging ', чтобы увидеть противоречивые значения ключей
ошибка. Я проверил свои старые проекты и использую аналогичный процесс.
Подробнее здесь: https://stackoverflow.com/questions/794 ... hen-update
Мобильная версия