【问题标题】:Entity SaveChanges is overriding subsequent entities Id values实体 SaveChanges 正在覆盖后续实体 Id 值
【发布时间】:2021-03-22 13:30:39
【问题描述】:

我有一个 for 循环来生成多个实体并保存到数据库中。

for(int x = 0; x < 3; x++){
    Unit unit = new Unit();
    unit.id = 0; //autogenerated value
    _context.Unit.Add(unit);
    _context.SaveChanges();

    Item item = new Item();
    item.unitid = unit.id;
    _context.Item.Add(item);
    _context.SaveChanges();
}

在这种情况下,假设单元输出 id 为 1,2,3 我假设 item.unitid 因此应该是三个项目,并且分别具有 1,2,3 的 unitid 值

实际上发生了什么,我有三个 unitid 为 3 的项目并保存到数据库中。

我尝试了循环内外的 saveChanges 组合。也使用了 EntityState.added 但类似的结果。

【问题讨论】:

  • 您应该使用导航属性,例如Item.Unit = unit。那么就无需设置这些id 属性并进行多次SaveChanges 调用。

标签: c# database entity-framework-core ef-core-3.1


【解决方案1】:

我不知道您要做什么,但是您的代码运行良好可能您在其他地方或测试语句有问题...这是我的测试

        var Context = new Test2Context();

        foreach(var Item in Context.Items)
        {
            Console.WriteLine(Item.id);
            Console.WriteLine(Item.unitid);

        }

        Console.WriteLine();
        Console.WriteLine();
        Console.WriteLine();
        foreach (var unit in Context.Units)
        {
            Console.WriteLine(unit.id);

        }
        Console.WriteLine();
        Console.WriteLine();
        Console.WriteLine();

        for (int x = 0; x < 3; x++)
        {
            Unit unit = new Unit();
            unit.id = 0;//autogenerated value
            Context.Units.Add(unit);
            Context.SaveChanges();

            Item item = new Item();
            item.unitid = unit.id;
            
            Context.Items.Add(item);
            Context.SaveChanges();


            Console.WriteLine(unit.id);
            Console.WriteLine(item.unitid);
            Console.WriteLine(item.id);
            Console.WriteLine();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多