Entity Framework, проблемы с обновлением связанных объектов

В настоящее время я работаю над проектом с использованием последней версии Entity Framework, и я столкнулся с проблемой, которую, похоже, не могу решить.

Когда дело доходит до обновления существующих объектов, я могу довольно легко обновлять свойства объекта, пока не дойдет до свойства, которое является ссылкой на другой класс.

В приведенном ниже примере у меня есть класс с именем Foo, который хранит различные свойства, причем 2 из них являются экземплярами других классов

public class Foo
{
     public int Id {get; set;}
     public string Name {get; set;}
     public SubFoo SubFoo {get; set}
     public AnotherSubFoo AnotherSubFoo {get; set}
}

Когда я использую нижеEdit() метод, я передаю объект, который я хочу обновить, и я могу получитьName для правильного обновления, однако мне не удалось найти способ получить свойства SubFoo для изменения. Например, еслиSubFoo класс имеет свойствоName, и это было изменено и отличается между моей БД иnewFoo, он не обновляется.

public Foo Edit(Foo newFoo)
{
    var dbFoo = context.Foo
        .Include(x => x.SubFoo)
        .Include(x => x.AnotherSubFoo)
        .Single(c => c.Id == newFoo.Id);

    var entry = context.Entry(dbFoo);
    entry.OriginalValues.SetValues(dbFoo);
    entry.CurrentValues.SetValues(newFoo);

    context.SaveChanges();

    return newFoo;
}

Любая помощь или указатели будут с благодарностью.

ОБНОВЛЕНИЕ: Основываясь на комментарии Слаумы, я изменил свой метод на

public Foo Edit(Foo newFoo)
{
    var dbFoo = context.Foo
        .Include(x => x.SubFoo)
        .Include(x => x.AnotherSubFoo)
        .Single(c => c.Id == newFoo.Id);

    context.Entry(dbFoo).CurrentValues.SetValues(newFoo);
    context.Entry(dbFoo.SubFoo).CurrentValues.SetValues(newFoo.SubFoo);

    context.SaveChanges();

    return newFoo;
}

При запуске этого сейчас я получаю ошибку:

Тип сущности Collection`1 не является частью модели для текущего контекста.

Чтобы попытаться обойти это, я добавил код, чтобы попытаться прикрепитьnewFoo подклассы к контексту, но это из-за ошибки, говорящей, чтоObjectManager уже была сущность такая же:

Объект с таким же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом

Ответы на вопрос(3)

Ваш ответ на вопрос