Entity Framework SaveChanges () не работает? - PullRequest
2 голосов
/ 13 июля 2010

Я использую Entity Framework с Visual Studio 2008, уверен, что это был SP1 .NET Framework и сама VS. Мое приложение разрабатывается в n-уровневой среде. Первый шаг - преобразование данных из контекста в коллекцию и сериализация в пользователя.

HRMSDBContext context = new HRMSDBContext();

List<InHouseTrainingHead> heads = context.InHouseTrainingHead.ToList<InHouseTrainingHead>();

foreach (InHouseTrainingHead head in heads)
{
    context.Detach(head);
}

return heads;

После того, как пользователь изменил некоторые данные и нажал «Сохранить», этот список возвращается к методу сохранения.

HRMSDBContext context = new HRMSDBContext();

foreach (InHouseTrainingHead head in lists)
{
    context.Attach(head);
    context.ApplyPropertyChanges(head.EntityKey.EntitySetName, head);
}

context.SaveChanges();

К сожалению, после SaveChanges () ничего не происходит. Как я могу решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 13 июля 2010

Чтобы расширить ответ Даниэля Брюкнера - в вашем примере происходит то, что вы пытаетесь ApplyPropertyChanges между head объектом и самим собой.Очевидно, что никаких изменений нет, поэтому ничего не сохраняется.Однако, если вы не хотите извлекать запись из БД, вы можете установить EntityState вновь присоединенного объекта на Modified вручную.В этом случае он будет сохранен в БД:

HRMSDBContext context = new HRMSDBContext();

foreach (InHouseTrainingHead head in lists)
{
    context.Attach(head);
    ObjectStateEntry addedEntity = context.ObjectStateManager.GetEntry(head);
    addedEntity.ChangeState(EntityState.Modified);
}

context.SaveChanges();
2 голосов
/ 13 июля 2010

Вы не используете ObjectContext.ApplyPropertyChanges так, как это предполагается использовать.Вам нужны два экземпляра объекта - неизмененный, прикрепленный к контексту, и отдельный измененный.Затем изменения применяются к неизмененной присоединенной сущности, она становится модифицированной, и вы можете сохранить изменения.Таким образом, вы не должны присоединять измененный объект, а загружать объект из базы данных до вызова ObjectContext.ApplyPropertyChanges.

...