EF 4.0:附加新数据的最佳方式

时间:2014-09-11 09:49:40

标签: entity-framework

我很抱歉难以理解的标题!

我尝试的很简单,我有这些表:

Maintable(ID) 
Child1(MainTableID, ID)
Child2(MainTableID, ID)
Child3(MainTableID, ID)
Child4(MainTableID, ID)

从Child1创建Child2,Child3和Child4,因此每次更改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#不太熟悉

1 个答案:

答案 0 :(得分:1)

据我所知,你实际上只是在编辑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();
}

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