如何附加包含n到n关系的对象?

时间:2011-03-03 14:13:52

标签: c# entity-framework entity-relationship

我有两个链接n-n的表。我有一个方法可以获取一个对象并保存。

public int Save(Table1 element)
{
    using (var database = new Entities())
    {
        if (element.ID == 0)
        {
            database.Table1.AddObject(element);
        }
        else
        {
            database.Attach(element); //
            database.ObjectStateManager.GetObjectStateEntry(element).SetModified();
            database.Refresh(RefreshMode.ClientWins, element);
        }

        return database.SaveChanges();
    }
}

当我不尝试修改obj1.Table2时,它会成功附加并保存。但是,如果我尝试修改此EntityCollection

element.Table2.Add(tb2);

然后保存,我收到以下错误:

  

具有临时EntityKey值的对象无法附加到对象上下文。

在行:database.Attach(element);

我该如何解决?


数据库:

Table 1             Table 2
ID | Name           ID | Name
---------           -------------------
 1 | One             1 | Related to One
 2 | Two             2 | Related to One
 3 | Three

            Table 3
            Tb1 | Tb2
            ---------
//            1 | 1
//            1 | 2

创建Table1对象:

var element = GetTable1Obj(1);

element.Table2.Add(GetTable2Obj(1)); // GetTable2Obj uses a separated context
element.Table2.Add(GetTable2Obj(2)); // like Save method to return the object

provider.Save(element); // Method above

1 个答案:

答案 0 :(得分:2)

enter image description here

如果您的实体框架工作模型设置为这样,您应该能够修改t1或t2而不会出现问题。而仍然保持

从示例中的表3的外观来看,您没有条目的键。 修改实体对象时会出现问题。您的DB Fk设置为什么。