代码之家  ›  专栏  ›  技术社区  ›  Kenzo_Gilead

更新与另一个表对象(NxN)相关的实体对象(插入、删除)

  •  0
  • Kenzo_Gilead  · 技术社区  · 6 年前

    表1-实体对象1

    内景

    一串

    属性3

    属性4 列表(EntityObject2)

    属性1 内景

    属性2 一串


    所以:

    var previous = context.TABLE1.Include(path => path.TABLE2)
          .Where(p => p.Attribute1 == updateElement.Attribute1).FirstOrDefault();
    previous.Attribute4 = updateElement.Attribute4;
    context.SaveChanges();
    

    不像我说的那样工作。

    弗斯特 -从上下文中删除上一个,然后保存上下文。

    第二 -添加updateElement并保存上下文(不考虑PKs更改的事实)

    有没有一个简单的方法来实现这一点?

    完全迷路了。。。谢谢你们。

    1 回复  |  直到 4 年前
        1
  •  0
  •   Elias MP    6 年前

    终于找到了。我发布的想法是帮助他人实现这一目标,至少是这样:

    用于插入

    (using context = new Dbcontext())
    {
      using (var transaction = context.Database.BeginTransaction(IsolationLevel.Serializable))
      {
        Table1 object1 = new Table1
        {
          Attribute1 = 1, //(autoincrement really)
          Attribute2 = "random value",
          Attribute3 = "random value",
        };
    
        foreach (Table2 obj2 in NewValues)
        {
          Table2 o = new Table2() {Attribute1 = obj2.int, Attribute2 = obj2.string};
          context.Table2.Attach(o);
          object1.Attribute4.Add(o);
        }
      }
    }
    

    用于更新

    我只是擦掉,以便以后插入。


    在临时列表中存储列表 最后,将临时列表添加到object1.Attribute4。

    (using context = new Dbcontext())
    {
      using (var transaction = context.Database.BeginTransaction(IsolationLevel.Serializable))
      {
        Table1 object1 = new Table1
        {
          Attribute1 = 1, //(autoincrement really)
          Attribute2 = "random value",
          Attribute3 = "random value",
        };
    
        List<Table2> tempTable2 = new List<Object2>();
        foreach (Table2 obj2 in NewValues)
        {
          Table2 o = new Table2() {Attribute1 = obj2.int, Attribute2 = obj2.string};
          tempTable2.Add(o);
        }
    
        context.Table1.Add(object1);
        context.SavesChanges();
    
        Table1 object11 = context.Table1.First(o => o.Attribute1 == object1.Attribute1);
        object11.Attribute4 = tempTable2
        context.SavesChanges();
      }
    }