C# 当identity\u insert设置为OFF时,无法在表“APIMapping”中为identity列插入显式值
我遇到了一个标识插入问题,如标题中所述。Price类有一个子对象,该子对象由数据库中名为ApimappingId的外键链接。 下面的db类是使用Scaffold DbContext命令自动生成的 编辑*我认为原因是它试图插入我加载到price对象中的子Apimapping对象 主程序C# 当identity\u insert设置为OFF时,无法在表“APIMapping”中为identity列插入显式值,c#,entity-framework,C#,Entity Framework,我遇到了一个标识插入问题,如标题中所述。Price类有一个子对象,该子对象由数据库中名为ApimappingId的外键链接。 下面的db类是使用Scaffold DbContext命令自动生成的 编辑*我认为原因是它试图插入我加载到price对象中的子Apimapping对象 主程序 using (FinanceDBContext financeDBContext = new FinanceDBContext()) { foreach (var item in priceList)
using (FinanceDBContext financeDBContext = new FinanceDBContext())
{
foreach (var item in priceList)
{
financeDBContext.Price.Add(item);
}
financeDBContext.SaveChanges();
}
价格
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; }
}
解决方案是将子对象设置为null。我不知道为什么实体框架认为孩子已经需要添加了,而它已经存在了 如果有人能提供一个更好的解决方案来添加对象,而不必取消子对象,我将接受他们的答案,谢谢
using (FinanceDBContext financeDBContext = new FinanceDBContext())
{
foreach (var item in priceList)
{
item.Apimapping = null;
financeDBContext.Price.Add(item);
}
financeDBContext.SaveChanges();
}
使用apimappingid,这就足够了,试着打开渴望的加载 如果不想设置为null,请关闭对这些对象的跟踪
//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;
我不经常使用EF,但并没有其他人急于回答,所以我认为你们需要用身份来装饰你们的id。我本以为脚手架会足够聪明,可以做到这一点。看看这个问题是否有帮助:具体尝试一下[DatabaseGenerateAttributeDatabaseGenerateOption.Identity]mentioned@Crowcoder那是行不通的。我得到了以下错误。。。无法将属性“ApimappingId”配置为“ValueGeneratedUnUpdate”或“ValueGeneratedUndorUpdate”,因为在将实体添加到存储后无法更改键值。我不认为有必要从model@user7396598不起作用。除了运行scafolding命令来同步进一步的数据库更改之外,还会覆盖自动生成文件中的设置,我认为原因是它试图在添加price时插入子对象Apimapping,而不需要插入子对象Apimapping
//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;