Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework EF 4.0:追加新数据的最佳方式_Entity Framework - Fatal编程技术网

Entity framework EF 4.0:追加新数据的最佳方式

Entity framework EF 4.0:追加新数据的最佳方式,entity-framework,Entity Framework,我为这个难以理解的标题感到抱歉 我尝试的很简单,我有以下表格: Maintable(ID) Child1(MainTableID, ID) Child2(MainTableID, ID) Child3(MainTableID, ID) Child4(MainTableID, ID) Child2、Child3和Child4是从Child1创建的,因此每次更改Maintable或Child1时,我都会重新创建它们: Child2 = GetChild2FromChild1() Child3 =

我为这个难以理解的标题感到抱歉

我尝试的很简单,我有以下表格:

Maintable(ID) 
Child1(MainTableID, ID)
Child2(MainTableID, ID)
Child3(MainTableID, ID)
Child4(MainTableID, ID)
Child2、Child3和Child4是从Child1创建的,因此每次更改Maintable或Child1时,我都会重新创建它们:

Child2 = GetChild2FromChild1()
Child3 = GetChild3FromChild1()
Child4 = GetChild4FromChild1()
之后,我只需删除旧表,并保存新创建的表:

using (var context = new EF())
{
    context.DeleteObject(child2); // only the ones belong to Maintable 
    context.DeleteObject(child3);   
    context.DeleteObject(child4);
}       

using (var context = new EF())
{
    // because i always delete child2->4 , so i always set their state to be Added 
    // here i will add the new tables, something like this :  
    foreach (var child2 in Maintable.child2)
    {
        counterID--;
        child2.State = State.Added;
        child2.ID = counterID;
    }


    context.SaveChanges();
}
我知道这很难理解,所以以下是步骤:

  • 实体
    Maintable
    包含四个子表(1->4)
  • 每次我需要更新实体
    Maintable
    ,我都必须删除:Maintable.Child2、Maintable.Child3、Maintable.Child4,Child1除外
  • 然后我将新数据附加到Child2、Child3、Child4
但是这个解决方案真是让人头疼,我不断地犯错误,我几乎不知道为什么,还有奇怪的结果等等,例如,在发布这个问题之前,我已经等了一个下午的调试,没有任何积极的进展


所以我想问的是,有没有另一种方法可以满足我的需要,但也是一种“干净”的方法,因为我认为我的问题不是很复杂,而且据我所知,我对C不太熟悉,你实际上只是在编辑child2-3-4的ID。如果我没弄错的话,这就是更新的方法

using (var context = new EF())
{  
    foreach (var child2 in Maintable.child2)
    {
        counterID--; 
        child2.ID = counterID;
    }

    foreach (var child3 in Maintable.child3)
    {
        counterID--; 
        child3 .ID = counterID;
    }

    foreach (var child4 in Maintable.child4)
    {
        counterID--; 
        child4 .ID = counterID;
    }

    context.SaveChanges();
}

但我怀疑这是你问的问题://

可能是我,但从你的问题中我一点也不明白。也可能与其他人一样,考虑修改你的问题。你想添加新的行吗?还是更新行?您的问题实际上不太清楚:/等等,我会编辑它,谢谢您使用
using(var context=new EF())
,在第一个中删除对象,但由于您没有使用
范围将其保存在第二个
中,因此不会删除它们。@Null:这是我问题的一个更详细的版本,请看一看:这是我问题的一个更详细的版本,请看: