Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当identity\u insert设置为OFF时,无法在表“APIMapping”中为identity列插入显式值_C#_Entity Framework - Fatal编程技术网

C# 当identity\u insert设置为OFF时,无法在表“APIMapping”中为identity列插入显式值

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)

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

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

主程序

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;