Следующие шаги помогут вам настроить глобальные переменные среды, которые можно использовать в различных сборках и конвейерах. Действия могут немного отличаться в зависимости от установленной версии Jenkins. Приведенные ниже шаги основаны на версии 2.7.4:
Чтобы использовать эту глобальную переменную среды, перейдите к области ввода в определении сборки и используйте: $ {arg_name}
Вы хотите использовать метод присоединения на таблице клиентов на контексте данных.
datacontext.customers.Attach(customer);
повторно подключить его к контексту данных. Затем можно использовать SubmitChanges()
обновить значения в базе данных.
Править: Это только работает с объектами, которые были отсоединены от исходного контекста данных до сериализации. Если Вы не возражаете против дополнительного вызова к базе данных, можно использовать идиоматический метод в ASP.NET, который предлагает MVC получения объекта снова и применения изменений через UpdateModel или TryUpdateModel как @Odd.
Это - то, что мне не нравится приблизительно LINQ-SQL.
Это обычно хорошо работает, если Вы запрашиваете и обновляете в том же объеме, но если Вы получаете объект, кэшируете его и затем пытаетесь обновить его позже, Вы не можете.
Вот то, что говорит документация:
Используйте методы Присоединения с объектами, которые были созданы в одном DataContext, и сериализированы клиенту и затем десериализовали назад с намерением выполнить обновление или удалить операцию. Поскольку новый DataContext не имеет никакого способа отследить то, чем исходные значения были для разъединенного объекта, клиент ответственен за предоставление тех значений. В этой версии Присоединения объект, как предполагается, находится в его состоянии исходного значения. После вызова этого метода можно затем обновить его поля, например, с дополнительными данными, отправленными от клиента.
Не пытайтесь Присоединить объект, который не был отсоединен посредством сериализации. Объекты, которые не были сериализированы все еще, поддерживают связи с задержанными загрузчиками, которые могут вызвать неожиданные результаты, если объект становится прослеженным вторым контекстом данных.
Немного неоднозначный, по моему скромному мнению, конкретно о точно, под чем это подразумевает "сериализированный" и "десериализованный".
Кроме того, интересно достаточно вот то, что это говорит об объекте DataContext:
В целом экземпляр DataContext разработан для длительности одну "единицу работы" однако приложение определяет тот термин. DataContext является легким и не является дорогим для создания. Типичный LINQ к приложению SQL создает экземпляры DataContext в объеме метода или как член недолгих классов, которые представляют логический набор связанных операций базы данных.
Так, DataContexts предназначаются, чтобы быть плотно ограниченными по объему - и все же использовать Присоединение (), необходимо использовать тот же DataContext, который запросил объект. Я принимаю/надеюсь, что мы все полностью неправильно понимаем то, для чего Присоединение () действительно предназначается, чтобы использоваться.
То, что я должен был сделать в таких ситуациях, является перезапросом объект, который я должен был обновить, чтобы получить новую копию и затем сделать обновление.
У клиента, которого Вы отправляете от формы, не будет ключей объекта, так может не присоединить хорошо, также Вы не можете иметь каждое поле в наличии клиента на форме так весь, он - поля, может не быть установлен.
Я рекомендовал бы использовать метод TryUpdateModel, в Вашем действии необходимо будет получить клиента от базы данных снова и обновить его с переменными сообщения формы.
public ActionResult MySaveAction(int id, FormCollection form)
{
Customer updateCustomer = _Repository.GetCustomer(id);
TryUpdateModel(updateCustomer, "Customer", form);
_Repository.Save(updateCustomer);
}
Необходимо будет добавить во всей собственной обработке исключений и проверке, конечно, но это - общее представление.