实体框架。违反UNIQUE KEY约束

时间:2018-02-11 12:45:30

标签: c# entity-framework .net-core entity-framework-core

我正在创建一个对象列表并将它们添加到我的DbContext,然后保存它们。问题是我向数据库添加了一个唯一约束来阻止具有重复数据的对象。

因为在SaveChanges上抛出了错误,我可以尝试单独保存每个对象并捕获错误。这是一个糟糕的解决方案,有没有更好的方法来处理它?<​​/ p>

    using (FinanceDBContext financeDBContext = new FinanceDBContext())
    {
        foreach (var item in priceList)
        {
            item.Apimapping = null;
            financeDBContext.Price.Add(item);
        }

        financeDBContext.SaveChanges();
    }

我的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; }
}

1 个答案:

答案 0 :(得分:2)

首先检查提供清单中的重复项

var distinctBids = priceList.Select(p => p.Bid).ToList();
if (priceList.Count != distinctBids.Count())
    return BadRequest(); // even the provided list have duplicates;

检查输入值的重复项

if (context.Price.Any(e=> distinctBids.Contains(e.Bid)))
    return BadRequest(); // check for duplicates in database

之后可以安全地插入值

// Now its safe to add new prices;
foreach (var item in priceList)
{
    item.ApimappingId = null;
    context.Employees.Add(item);
}
context.SaveChanges();

您还需要按照here

所述,将所有上述陈述放在一个牵引力中