2015-05-12 4 views
1

Прежде всего, вот что я пытаюсь достичь:Databinding с использованием SQLite и Entity Framework

Я хочу иметь вид, который автоматически выталкивает любые изменения в базу данных SQLite, если какой-либо из свойств его элементов управления меняются (Просто!).

Моя логика, которая также может быть фиктивной из-за отсутствие опыта:

  1. Добавить пустой объект в базу данных
  2. Получить свой экземпляр обратно из контекста
  3. Bind этого экземпляра Контроль (простой TextBox сейчас)

Я ожидаю, что данные, которые будут отброшены в D B, когда я обновляю свой TextBox, но ничего не происходит.

Вот как я это делаю:

Код excerp:

AddBook(new Book()); // First, add empty object for referencing. 

Book book; 
using (var context = new MyDataContext()) 
{ 
    book = context.Books.OrderByDescending(x => x.BookId).FirstOrDefault();  
} 

SelectedBook = book; // My property is now set to the DB object. 

и связывание:

<TextBox Text="{Binding SelectedBook.BookName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

Что мне не хватает?

ответ

1

У вас не хватает много :)

Я считаю, что ваш MyDataContext расширяет DbContext. Если это так, DbContext должен быть «единицей работы». Обычно:

  1. Получить некоторые данные из базы данных и имеет EF выставить их в качестве коллекции объектов
  2. редактирования этого коллекций по мере необходимости, добавление, удаление и редактирование объектов
  3. Нажмите изменения в призвание базы данных SaveChanges
  4. Утилизируйте DbContext и начать заново с новым один

В вашей выборке вы расположени DbContext как только фаза 1 конец. EF больше не отслеживает ваши объекты, поэтому он не будет иметь представления о том, что вы изменили, и ничего не нажимает на базу данных.

В комментариях вы говорите: «Моя собственность теперь установлена ​​на объект DB». Это не так. Он установлен на объект, который был первоначально восстановлен EF, но EF «забыл об этом» в тот момент, когда вы разместили DbContext. Объект все еще существует только потому, что вы все еще ссылаетесь на него со своей «книжной» переменной.

+0

Как вы правильно вставляете обновленный объект обратно в базу данных? – eYe

+0

DbContext.SaveChanges – corradolab

Смежные вопросы