SubmitChanges не "отправка" в LINQ to SQL - PullRequest
0 голосов
/ 28 августа 2011

Я создаю приложение, используя WPF, MVVM и LINQ to SQL. У меня есть коллекция заметок на объект типа Расчет. Поэтому я создал ViewModel-класс для этого называется vmCalculation. Моя проблема в том, что когда я пытаюсь добавить заметку к этому объекту и отправить изменения, «заметка» не передается в базу данных.

Содержание vmCalculation

public class vmCalculation : vmBase
{
    Calculation calc;

    public ObservableCollection<Note> Notes { get; private set; }

    public vmCalculation(Calculation calc)
    {
        this.calc = calc;
        Notes = new ObservableCollection<Note>();
        foreach (var n in calc.Notes) Notes.Add(n);
    }

    public void AddNote()
    {
        Notes.Add(new Note
        {
            NoteText = "New note",
            NoteType = 1
        });
    }

    internal void Save()
    {
        foreach (var n in Notes.Where(n => n.NoteId == 0))
            calc.Notes.Add(n);
    }
}

Метод в vmNotes (ViewModel для "NoteWindow")

public void SaveChanges()
    {
        CurrentCalc.Save();
        DC.SubmitChanges();
    }

CurrentCalc - это свойство, которое получает / устанавливает vmCalculation, который я использую в привязке данных (привязка DataGrid к CurrentCalc.Notes).

Когда я запускаю AddNote () на CurrentCalc, представление обновляется просто замечанием «Новая заметка». Но когда я запускаю SaveChanges (), заметка не записывается в базу данных.

Есть мысли по этой проблеме?

Возможной причиной проблемы может быть то, что я не инициализирую DataContext (DC) в vmNotes. Я получаю DataContext из другой ViewModel, чтобы не разрушать MVVM-структуру.

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

Вы должны добавить свои новые объекты в текстовый текст перед отправкой. Пример:

DC.Notes.InsertOnSubmit(NewNote);
DC.SubmitChanges();
0 голосов
/ 29 августа 2011

Мысль о возможном решении моей проблемы.

Я немного обновил метод SaveChanges () в классе vmNotes.

public void SaveChanges()
    {
        var newNotes = currentCalc.Notes.Where(n => n.NoteId == 0);
        DC.Notes.InsertAllOnSubmit(newNotes);
        DC.SubmitChanges();
    }
}

ОБНОВЛЕНИЕ 03/09/2011:

Вышеупомянутый код все равно не нужен.

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

Я вырезал некоторые из них, и теперь мойоригинальный код работает просто отлично!

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