обновления структуры сущности молча игнорируются - PullRequest
2 голосов
/ 16 ноября 2010

Я получаю пребывание через службу WCF и передаю его клиенту.Пользователь обновляет данные этого объекта и затем передает их обратно службе WCF.

Следующий код прекрасно работает для добавления новых остановок, но он молча игнорирует обновления.Чего мне не хватает?

public void UpdateStay (ResidentDataTypes.Stay stay)

    {
        using (ResidentDataTypes.ResidentEntities entity = new ResidentDataTypes.ResidentEntities())
        {
            if (stay.StayId == Guid.Empty)
            {
                entity.Stay.AddObject(stay);
            }
            else
            {
                entity.Stay.ApplyChanges(stay);
            }
            entity.SaveChanges();
        }
    }

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Когда ваши объекты сериализуются из WCF, они находятся в отдельном состоянии, и EF не будет генерировать для них оператор обновления. У вас есть 2 варианта:

1. Получите тот же объект из БД и затем выполните ObjectSet.ApplyCurrentValues:

using (ResidentDataTypes.ResidentEntities context = new 
                                            ResidentDataTypes.ResidentEntities())
{
    if (stay.StayId == Guid.Empty)
    {
        context.Stay.AddObject(stay);
    }
    else
    {
         // Fetch the Stay object into the cache:
         context.Stay.First(s => s.StayId == stay.StayId);

         // Now ApplyCurrentValues from the stay object coming from WCF:
         context.Stay.ApplyCurrentValues(stay);
    }
    entity.SaveChanges();
}


2. Вручную измените состояние «Отсоединено» на «Изменено»:

using (ResidentDataTypes.ResidentEntities context = new 
                                            ResidentDataTypes.ResidentEntities())
{
    if (stay.StayId == Guid.Empty)
    {
        context.Stay.AddObject(stay);
    }
    else
    {        
        // Attach the stay object coming from WCF to ObjectContext:
        context.Stay.Attach(stay);

        // The attached object is going into Unchanged mode after attaching 
       // so we need to change the state to Modified:
        context.ObjectStateManager.ChangeObjectState(stay, EntityState.Modified);
     }
     entity.SaveChanges();
}
0 голосов
/ 16 ноября 2010

я думаю, что вы должны прикрепить вашу сущность к вашему контексту с помощью чего-то вроде

entity.Attach(stay)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...