Хобрук: Ваш путь к мастерству в программировании

Linq2Sql не обновляет изменения

Я использую Linq2Sql для обновления данных строки, но как только я изменю значения, я исследовал эту проблему раньше и нашел следующие возможные причины:

  • Сущность не была изменена, поэтому обновление не происходит
  • У объекта отсутствует первичный ключ, но обновление не происходит

Ничего из этого в моей ситуации нет.

У меня есть ПК в моем классе и за столом. GetChangeSet() контекста данных указывает, что есть по крайней мере 1 обновление.

Единственные проблемы, которые я вижу, это то, что из журнала контекста данных не создается оператор обновления.

Кто-нибудь знает, в чем может быть дело.

Вот пример кода:

using(context db=new context())
{
 db.Log=new System.IO.StreamWriter(sample){AutFlush=true};
 MyObject obj=db.MyTable.SingleOrDefault(row=>Email==email);
 if(obj!=null)
 {
   obj.FirstName=firstName;
   obj.LastName=lastName;
   System.Data.Linq.ChangeSet set=db.GetChangeSet();
   db.SubmitChanges();
 }
}

Ответы:


1

Вы можете попробовать это

if(obj!=null)
 {
   obj.FirstName=firstName;
   obj.LastName=lastName;
   db.MyTable.InsertOnSubmit(obj);
   db.SubmitChanges();

   System.Data.Linq.ChangeSet set = db.GetChangeSet();
 }
01.08.2014
  • Строка уже существует, поэтому, когда я пробую InsertOnSubmit, я получаю Невозможно добавить уже существующий объект. 01.08.2014

  • 2

    Я нашел проблему. Для всех, кто заинтересован.

    Ранее я добавил логику проверки в свой DataContext Clas. Например, если имя моей таблицы «Продукт», я добавил проверку частичного метода «UpdateProduct».

    Однако я забыл сообщить LINQ to SQL, чтобы он продолжал вносить изменения в базу данных. Таким образом, он будет проверять, а затем ничего не делать, потому что я не продолжил код.

    Для всех, кому это нужно, чтобы сделать это правильно, мне нужно было вызвать «ExecuteDynamicUpdate», когда логика прошла.

    Пример обновленного решения:

    partial void UpdateObj(Obj instance)
    {
      if(instance.Field==null)
      {
         thow new NotImplementedException();
      }
      //Added missing code continuation
      this.ExecuteDynamicUpdate(instance);
    }
    

    Мне очень помог блог ScottGu...http://weblogs.asp.net/scottgu/linq-to-sql-part-4-updating-our-database

    01.08.2014
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..