linq to sql отправить изменения не работает - PullRequest
2 голосов
/ 10 февраля 2012

У меня есть представление списка с двумя столбцами в wpf Customername и Isvalid. Я использую linq для sql, чтобы получить данные из моей таблицы sql. Когда я пытаюсь обновить значение в таблице, я не вижу никаких изменений в стол.

Вот мой код, когда я нажимаю на кнопку сохранения:

 try
        {
            CustomersDataContext dataContext = new CustomersDataContext();
            Customer customerRow = MyDataGrid.SelectedItem as Customer;
            string m = customerRow.CustomerName;
            Customer customer = (from p in dataContext.Customers
                                 where p.CustomerName == customerRow.CustomerName
                                 select p).Single();

            customer.Isvalid=false;

            dataContext.SubmitChanges();
            MessageBox.Show("Row Updated Successfully.");

        }
        catch (Exception Ex)
        {
            MessageBox.Show(Ex.Message);
            return;
        }

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

Буду рад, если кто-нибудь укажет, где мне не хватает логики для обновления значения "ISVALID" в базе данных.

Ответы [ 2 ]

5 голосов
/ 10 февраля 2012

Во-первых, где твой блок using(get_datacontext){...}? Вам нужно избавиться от DataContext s, когда вы закончите с ними!

В любом случае ...

Я предполагаю, что оператор update генерирует предложение where, которое слишком узкое или просто неверное.

Я бы проверял свойство «Проверка обновления» каждого столбца в вашей сопоставленной таблице в конструкторе Linq to Sql. Самое простое, что нужно сделать, это установить для столбца первичного ключа значение Always, а для всех остальных - значение Never. Вы также можете установить для них значение WhenChanged.

Поведение дизайнера по умолчанию обычно устанавливает его на Always для всего; это не только вызывает ужасные условия WHERE для обновлений, но также может иногда вызывать проблемы. Очевидно, что такое поведение требуется для правильной проверки параллелизма (то есть два потока обновляют одну и ту же строку); так что знайте об этом.

О, если подумать о другом - вы также можете получить такое поведение, если ваша таблица не имеет первичного ключа, обозначенного в конструкторе, - убедитесь, что один из столбцов равен.

Наконец, вы можете проверить генерируемый SQL при вызове SubmitChanges; присоединяя TextWriter к свойству DataContext.Log ; или в равной степени IntelliTrace в VS2010 будет собирать все запросы ADO.Net, которые выполняются, если вы начнете с отладки. Это неоценимо при отладке, почему вещи L2S не работают должным образом.

0 голосов
/ 10 февраля 2012

Вы должны добавить обновленного клиента в список обновляющихся клиентов.Я имею в виду, прежде чем сохранять изменения, вы должны сделать что-то вроде: db.AddToCustomers (customer).AddToCustomers используется в EF, я точно не знаю его эквивалент в LINQ.

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