Sto creando un elenco di oggetti e li aggiungo al mio DbContext
, quindi li salvo. Il problema è che ho aggiunto un vincolo univoco al database per bloccare oggetti con dati duplicati.
Poiché l'errore viene generato su SaveChanges
, potrei provare a salvare ciascun oggetto individualmente e rilevare l'errore. È una soluzione scadente e c'è un modo migliore di gestirlo?
using (FinanceDBContext financeDBContext = new FinanceDBContext())
{
foreach (var item in priceList)
{
item.Apimapping = null;
financeDBContext.Price.Add(item);
}
financeDBContext.SaveChanges();
}
Il mio oggetto di Price
public partial class Price
{
public int PriceId { get; set; }
public decimal LastPrice { get; set; }
public decimal Bid { get; set; }
public decimal Ask { get; set; }
public DateTime DateCreated { get; set; }
public int? ApimappingId { get; set; }
public Apimapping Apimapping { get; set; }
}
Prima controlla i duplicati nella lista di fornitura
var distinctBids = priceList.Select(p => p.Bid).ToList();
if (priceList.Count != distinctBids.Count())
return BadRequest(); // even the provided list have duplicates;
Cerca i duplicati per i valori di input
if (context.Price.Any(e=> distinctBids.Contains(e.Bid)))
return BadRequest(); // check for duplicates in database
dopo di ciò è sicuro inserire valori
// Now its safe to add new prices;
foreach (var item in priceList)
{
item.ApimappingId = null;
context.Employees.Add(item);
}
context.SaveChanges();
dovrai anche mettere tutte le dichiarazioni di cui sopra in una sola trazione come descritto qui