Как прикрепить объект, который содержит отношение n к n? - PullRequest
6 голосов
/ 03 марта 2011

У меня есть две таблицы, которые связаны 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 не может быть присоединен к объектуcontext.

в строке: 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 Ответ

2 голосов
/ 06 марта 2011

enter image description here

Если рабочая модель фрейма вашей сущности настроена на что-то подобное, вы сможете изменить t1 или t2 без проблем.сохраняя при этом

Судя по таблице 3 в вашем примере, у вас нет ключа для записей.Что вызовет проблемы при изменении объекта Entity.На что установлена ​​ваша DB Fk.

...