M>M>_dbContext.Entities.AsNoTracking().Where(a => a.Key == obj.Key);
M>
Есть мнение, что здесь не в db-контексте поиск происходит, а каждый раз выполняется полноценный запрос в БД.
Чтобы искало сначала в контексте — есть метод Find.
Если нужно искать только в контексте без похода в БД, можно написать свой extension, который будет смотреть в change tracker. Либо трекать дубликаты через отдельный HashSet.
Если же нужна максимальная производительность — то убери ef core. Заливай через bulk insert во временную stage таблицу и затем, обединяй с основной через merge.