当IDENTITY_INSERT设置为OFF时,无法在表'APIMapping'中为identity列插入显式值

时间:2018-02-07 21:39:42

标签: c# entity-framework

我遇到了标题中描述的IDENTITY_INSERT问题。 Price类有一个子对象,该对象由名为ApimappingId的数据库中的外键链接。 下面的db类是使用Scaffold-DbContext命令自动生成的。

编辑*我认为原因是它试图插入我加载到价格对象中的子Apimapping对象。

主程序

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

    financeDBContext.SaveChanges();
}

价格

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

ApiMapping

public partial class Apimapping
{
    public Apimapping()
    {
        Price = new HashSet<Price>();
    }

    public int ApimappingId { get; set; }
    public int? ExchangeId { get; set; }
    public int? SecurityId { get; set; }
    public string Url { get; set; }

    public Exchange Exchange { get; set; }
    public Security Security { get; set; }
    public ICollection<Price> Price { get; set; }
}

2 个答案:

答案 0 :(得分:1)

使用ApiMapping ID,绰绰有余并尝试转动急切加载。

如果您不想将这些对象设置为空转跟踪。

//if you want to load all 
context.ApiMappings.AsNoTracking().ToList(); 

// Use condition if you have some condition
context.ApiMappings.Where(x => apimappingIds.Contains(x.ApimappingId)).AsNoTracking().ToList();

//You can detach each entity also
dbContext.Entry(item.Apimapping).State = EntityState.Detached;

答案 1 :(得分:0)

解决方案是将子对象设置为null。我不确定为什么实体框架认为孩子已经存在时已经需要添加。

如果有人可以提供更好的解决方案来添加对象而不必让孩子无效,我会接受他们的回答谢谢

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

        financeDBContext.SaveChanges();
    }