Oracle Link - обновление элемента сущности, отправленного через веб-сервис - PullRequest
0 голосов
/ 21 июня 2011

Я пытался понять, почему это не работает. У меня есть веб-сервис с несколькими методами. Один из них возвращает элемент сущности, а другой ожидает элемент этой же сущности и должен обновить контекст и базу данных изменениями, сделанными на стороне клиента.

код "get" выглядит следующим образом

public InvoiceHeader getHeader(long pIdHeader){
  try{
    InvoiceHeader ih = lContext.InvoiceHeaders.SingleOrDefault(x => x.idHeader == pIdHeader);
    return ih;
  } catch (Exception exp){
    //log error
  }
}

Я попробовал несколько подходов, чтобы заставить это работать. Вот те, которые, я думаю, наиболее близки к ответу: s (1):

public bool submitChanges(InvoiceHeader iHeader){
  try{
    InvoiceHeader ih = getHeader(iHeader.idHeader);
    lContext.InvoiceHeaders.Context.Refresh(RefreshMode.KeepChanges, iHeader);
    lContext.SubmitChanges();

    return true;
  } catch (Exception exp) {
    //log error
    return false;
  }
}

другой подход был (2)

 public bool submitChanges(InvoiceHeader iHeader){
  try{
    lContext.InvoiceHeaders.Attach(iHeader, true);
    lContext.SubmitChanges();

    return true;
  } catch (Exception exp) {
    //log error
    return false;
  }
}

В обоих случаях все работало нормально, чтобы "вернуть истину", но обновление не было сделано. Посоветуйте пожалуйста что я тут делаю не так. Если вам нужна дополнительная информация, дайте мне знать. Спасибо всем Рикардо.

1 Ответ

0 голосов
/ 21 июня 2011

решаемая. Как выясняется, когда мы выводим объект из-под контроля контекста, он больше не будет его контролировать, даже если мы присоединим его к контексту. Если, конечно, если у нас есть поле is версии; Чтобы это заработало,

=> добавить поле версии к вашей сущности;

1) флажок Nullable

2) Флажок Is Version

3) Проверка обновления = Никогда

4) Автосинхронизация всегда;

Вы должны как-то обработать версию. Возможно, при запуске триггера; Код:

1) создайте новый экземпляр вашего контекста;

2) прикрепить объект, сообщая linq, что он был изменен

3) отправить изменения

DataContext lContext = new DataContext();
lContext.InvoiceHeaders.Attach(iHeader, true);
lContext.SubmitChanges();

БОЛЬШОЙ БОЛЬШОЙ разницей с тем, что я уже пробовал ранее, является поле версии моей сущности.

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