Обновление разъединенного LINQ возражает с Платформой MVC RC1

Следующие шаги помогут вам настроить глобальные переменные среды, которые можно использовать в различных сборках и конвейерах. Действия могут немного отличаться в зависимости от установленной версии Jenkins. Приведенные ниже шаги основаны на версии 2.7.4:

  • Перейдите в меню «Управление Jenkins» в левом боковом меню
  • Нажмите «Настроить систему» ​​
  • Прокрутите вниз до find «Глобальные свойства»
  • Проверьте «Переменные среды»
  • Нажмите «Добавить»
  • Добавьте имя и значение в правильной области ввода (Пример: arg_name & amp; arg_value) [ 115]
  • Нажмите «Сохранить» внизу страницы

Чтобы использовать эту глобальную переменную среды, перейдите к области ввода в определении сборки и используйте: $ {arg_name}

5
задан John Sheehan 3 February 2009 в 21:34
поделиться

3 ответа

Вы хотите использовать метод присоединения на таблице клиентов на контексте данных.

datacontext.customers.Attach(customer);

повторно подключить его к контексту данных. Затем можно использовать SubmitChanges() обновить значения в базе данных.

Править: Это только работает с объектами, которые были отсоединены от исходного контекста данных до сериализации. Если Вы не возражаете против дополнительного вызова к базе данных, можно использовать идиоматический метод в ASP.NET, который предлагает MVC получения объекта снова и применения изменений через UpdateModel или TryUpdateModel как @Odd.

0
ответ дан 14 December 2019 в 04:49
поделиться

Это - то, что мне не нравится приблизительно LINQ-SQL.

Это обычно хорошо работает, если Вы запрашиваете и обновляете в том же объеме, но если Вы получаете объект, кэшируете его и затем пытаетесь обновить его позже, Вы не можете.

Вот то, что говорит документация:

Используйте методы Присоединения с объектами, которые были созданы в одном DataContext, и сериализированы клиенту и затем десериализовали назад с намерением выполнить обновление или удалить операцию. Поскольку новый DataContext не имеет никакого способа отследить то, чем исходные значения были для разъединенного объекта, клиент ответственен за предоставление тех значений. В этой версии Присоединения объект, как предполагается, находится в его состоянии исходного значения. После вызова этого метода можно затем обновить его поля, например, с дополнительными данными, отправленными от клиента.

Не пытайтесь Присоединить объект, который не был отсоединен посредством сериализации. Объекты, которые не были сериализированы все еще, поддерживают связи с задержанными загрузчиками, которые могут вызвать неожиданные результаты, если объект становится прослеженным вторым контекстом данных.

Немного неоднозначный, по моему скромному мнению, конкретно о точно, под чем это подразумевает "сериализированный" и "десериализованный".

Кроме того, интересно достаточно вот то, что это говорит об объекте DataContext:

В целом экземпляр DataContext разработан для длительности одну "единицу работы" однако приложение определяет тот термин. DataContext является легким и не является дорогим для создания. Типичный LINQ к приложению SQL создает экземпляры DataContext в объеме метода или как член недолгих классов, которые представляют логический набор связанных операций базы данных.

Так, DataContexts предназначаются, чтобы быть плотно ограниченными по объему - и все же использовать Присоединение (), необходимо использовать тот же DataContext, который запросил объект. Я принимаю/надеюсь, что мы все полностью неправильно понимаем то, для чего Присоединение () действительно предназначается, чтобы использоваться.

То, что я должен был сделать в таких ситуациях, является перезапросом объект, который я должен был обновить, чтобы получить новую копию и затем сделать обновление.

5
ответ дан 14 December 2019 в 04:49
поделиться

У клиента, которого Вы отправляете от формы, не будет ключей объекта, так может не присоединить хорошо, также Вы не можете иметь каждое поле в наличии клиента на форме так весь, он - поля, может не быть установлен.

Я рекомендовал бы использовать метод TryUpdateModel, в Вашем действии необходимо будет получить клиента от базы данных снова и обновить его с переменными сообщения формы.

public ActionResult MySaveAction(int id, FormCollection form)
{
    Customer updateCustomer = _Repository.GetCustomer(id);

    TryUpdateModel(updateCustomer, "Customer", form);

    _Repository.Save(updateCustomer);
}

Необходимо будет добавить во всей собственной обработке исключений и проверке, конечно, но это - общее представление.

3
ответ дан 14 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: