Ошибка при запросе к БД через EntityFrameworkCore C#

Подскажите по работе с Microsoft.EntityFrameworkCore

У меня есть База Данных с номерами телефонов:

id

nomerPhone

где nomerPhone - уникальное значение

и когда я добавляю в БД номер телефона дублирующий, у меня возникает ошибка, как ее можно будет обойти? вот мой запрос на добавление:

async public Task AddPhoneBd(List<string> listPhone)
{

    //подключаемся к БД
    using (ApplicationContext db = new ApplicationContext())
    {

        var data = listPhone.Select(phone => new StructureBd() { nomerPhone = phone });                
        db.base_wa.AddRange(data);

        //сохраняем изменения в БД
       await db.SaveChangesAsync();
    }
}

Ответы (1 шт):

Автор решения: Svyatoslav Danyliv

Вам надо переспросить у базы какие номера уже есть и не вставлять их:

async public Task AddPhoneBd(List<string> listPhone)
{
    using (ApplicationContext db = new ApplicationContext())
    {
        var existing = db.base_wa
           .Where(e => listPhone.Contains(e.nomerPhone))
           .Select(e => e.nomerPhone);
        
        var data = listPhone
           .Except(existing)
           .Select(phone => new StructureBd() { nomerPhone = phone });  
          
        db.base_wa.AddRange(data);

        //сохраняем изменения в БД
       await db.SaveChangesAsync();
    }
}

По просьбам добавляю вариант на linq2db с использованием временных таблиц. Для этого придется поставить расширение linq2db.EntityFrameworkCore

class Phones
{
   [Column] public string nomerPhone;
}

async public Task AddPhoneBd(List<string> listPhone)
{
    var phonesData = listPhone.Select(n => new Phones { nomerPhone = n });

    using (var db = new ApplicationContext())
    using (var l2db = db.CreateLinqToDBConnection())
    using (var tempTable = await l2db.CreateTempTableAsync("#Phones", phonesData)       
    {
        var queryToInsert = 
           from d in tempTable
           from p in db.base_wa.LeftJoin(p => p.nomerPhone == d.nomerPhone)
           where p == null
           select d;
           
        await queryToInsert.InsertAsync(db.base_wa.ToLinqToDBTable(),
          d => new StructureBd() { nomerPhone = d.nomerPhone });
    }
}
→ Ссылка