Код: Выделить всё
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>
Я могу добавить новые значения, используя ядро предприятия.
Проблема начинается, когда я хочу обновить значения.
У меня есть API, с точным точным глаголом put Код: Выделить всё
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.enablessensitividatalogging', чтобы увидеть конфликтующие значения ключей. Я проверил свои старые проекты и использую аналогичный процесс.clientКод: Выделить всё
group.MapPut("/{id}",
async Task (long id, Domain.Client client,
MyDbContext db, IMapper mapper) =>
{
// code above
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... hen-update
Мобильная версия