EF 4, POCO и AddOrUpdate - PullRequest
       3

EF 4, POCO и AddOrUpdate

1 голос
/ 08 июня 2010

Я пытаюсь создать метод в репозитории POCO EF 4 с именем AddOrUpdate.

Идея состоит в том, что бизнес-уровень может передать объект POCO, а среда хранения добавит объект, если онnew (еще не в базе данных), иначе обновит базу данных (после вызова SaveChanges ()) с новым значением.Это похоже на некоторые другие вопросы, которые я задавал об EF, но я только на 80% понимаю это, поэтому прошу прощения за частичное дублирование.

Часть, которую мне не хватает, это как обновить граф объектовв моем ObjectContext / ассоциированном ObjectSet для переданного бизнес-объекта, как только я определил, что бизнес-объект действительно уже существует в базе данных (и теперь был загружен благодаря TryGetObjectByKey).ApplyCurrentValues ​​звучит примерно так, как я хочу, но он только копирует скалярные значения и не предназначен для обновления графа объектов в ObjectContext / ObjectSet.Из-за моего конкретного случая использования мне сейчас нет дела до параллелизма.

public void AddOrUpdate(BO biz)
{
    object obj;

    EntityKey ek = Ctx.CreateEntityKey(mySetName, biz);
    bool found = Ctx.TryGetObjectByKey(ek, out obj);

    if (found)
    {
        // How do I do what this method name implies?  Biz is a parent with children.
        mySet.TellTheSetToUpdateThisObject(biz);
    }
    else
    {
        mySet.AddObject(biz);
    }

    Ctx.DetectChanges();
}

Ответы [ 2 ]

0 голосов
/ 09 июня 2010

Проблема заключалась в том, что мои бизнес-объекты использовали оператор new () для выделения дочерних объектов, а не для создания объекта из ObjectContext.Не совсем POCO-поведение, если вы не можете использовать new (), но, по крайней мере, оно работает после некоторого рефакторинга.

0 голосов
/ 08 июня 2010

Вы должны написать код для этого.Там нет ничего встроенного, который копирует весь график.Как вы говорите, ApplyCurrentValues будет хорошо работать для скалярных значений.Детям придется копировать себя.

...