Почему мой SubmitChanges () не работает в LINQ-to-SQL?

Я создал базу данных .MDF в своем приложении WPF.

Затем я сгенерировал классы LINQ-to-SQL и использовал LINQ для получения всех клиентов.

Затем я просматриваю их и меняю каждую фамилию.

Однако когда я вызываю SubmitChanges, база данных остается неизменной .

Я думал, что цель SubmitChanges () - отправлять изменения в базу данных?

Что мне не хватает, как мне «отправить изменения» обратно в мою базу данных?

public Window1()
{
    InitializeComponent();

    Main2DataContext _db = new Main2DataContext();
    var customers = from c in _db.Customers
                    select c;

    foreach (var customer in customers)
    {
        customer.LastName = "CHANGED lastname"; //ListBox shows changes 
    }

    _db.SubmitChanges(); //does NOT save to database (???)

}

Ответов (2)

Решение

Думаю, я знаю, в чем проблема. Вы используете локальный файл .mdf? В этом случае проверьте папку bin / debug. Бьюсь об заклад, у вас есть база данных с изменениями. Я думаю, у вас есть файл .mdf в вашем проекте, который копируется в папку bin / debug каждый раз, когда вы строите. Поэтому изменения сохраняются в копии, и вы не видите их отражения в копии, которая находится непосредственно в вашем проекте.

Убедитесь, что ваш _db не сбрасывается в новый контекст в любой момент между извлечением и изменением, если все хорошо, это проблема. Также вы можете упростить назначение источника данных, выполнив TheListBox.ItemsSource = _db.Customers; . У меня есть много мест в текущем коде, где я делаю именно то, что вы описываете, и изменения распространяются нормально. Дополнительное предложение, настройте ведение журнала в вашем контексте (установите _db.Log для некоторого писателя, я обычно использую, Console.Out чтобы я мог наблюдать за изменениями в окне вывода во время отладки), чтобы вы могли видеть изменения, которые действительно происходят, когда вы звоните SubmitChanges() .