我遇到了标题中描述的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; }
}
答案 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();
}