Задача. Есть база фильмов (фильм имеет различные поля, в данном контексте не имеет значение какие). В частности, фильм имеет коллекцию жанров. То есть еще существует таблица с жанрами и таблица для связи фильма и жанра "многие ко многим".
Делаю приложение WPF. Базой рулит отдельная библиотека классов. Чтобы оградить проект UI от EF, я решил сделать отдельный класс-адаптер (вопрос первый, нужен ли он или это плохая практика?). Адаптер инстансный. В адаптере создается контекст данных. Получается, что в рамках приложения я имею один экземпляр адаптера (а значит и один экземпляр контекста данных). Вопрос второй, это нормально? Ведь если каждый раз создавать новый контекст, приложение будет очень долго думать. При таком подходе у меня возникает еще проблема с сохранением данных. Ну например я открыл 2 формы, одна для редактирования информации о фильме, другая для редактирования набора жанров. И если я в форме редактирования жанров нажму "Сохранить" (то есть отправлю команду _context.SaveChanges()), то в базу занесутся и изменения, которые я внес, редактируя фильм (они ведь сделаны в одном контексте). Вопрос третий, как правильно работать с данными, чтобы такого не происходило? И вообще я не могу придумать, как прикрутить это все по человечески на MVVM. Пока что говнокодингом занимаюсь. :( В общем то это был четвертый вопрос. Как прикрутить это все на MVVM? Ко всему прочему мне нужен постраничный вывод. Пока приходит в голову только способ context.EntitySet.Skip(a).Take(b). И вот тут тоже вопрос. Правильно ли это? Не будет ли такой подход вызывать запрос всех предыдущих до скипа значений, прежде чем вернуть мне нужный набор?
Чтобы оградить проект UI от EF, я решил сделать отдельный класс-адаптер Просто можно использовать класс для контекста данных.
Если каждый раз создавать новый контекст, то почти ничего не изменится. Сейчас мощности вычислительной техники хватает, что бы создавать контекст постоянно. Можно создавать глобальную переменую для контекста и использовать её.
При таком подходе у меня возникает еще проблема с сохранением данных. Ну например я открыл 2 формы, одна для редактирования информации о фильме, другая для редактирования набора жанров. И если я в форме редактирования жанров нажму "Сохранить" (то есть отправлю команду _context.SaveChanges()), то в базу занесутся и изменения, которые я внес, редактируя фильм (они ведь сделаны в одном контексте).
Проблема с сохранениями не должна быть. Имеется 2 открытых формы и разные события для сохранения информации с форм. Нужно что бы context.Таблица.Add(ДАННЫЕ); и context.SaveChanges(); были в событие нажатия кнопки "Сохранить".
context.EntitySet.Skip(a).Take(b) - при таком запросе будет создан запрос к базе данных и он вернет только нужную выборку.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости