В настоящее время я пишу свое первое приложение MVVM, которое использует EntityFramework для доступа к данным. Приложение в значительной степени опирается на базовую базу данных и во многих случаях должно добавлять новые данные в БД.ObjectContext в ViewModel (EF + MVVM)
Тем не менее, я не уверен, есть ли идея вызвать ObjectContext внутри ViewModel. , например.
public class SomeViewModel : ViewModelBase
{
public IEnumerable<User> AllUsers { get; private set; }
private void SomeMethod()
{
var __entities = new DatabaseEntities();
AllUsers = __entities.Users.Where(...).ToList();
}
}
Я видел решения, как это, но есть какой-то вопрос, поставляемая вместе с ним. Например, как долго ObjectContext на самом деле живет, или если вы предпочитаете единый глобальный доступный ObjectContext.
Или должны звонить, как те, которые не являются частью виртуальной машины в первую очередь? В настоящее время я также могу представить, как реализовать StaticHelpers для каждой таблицы DB и использовать такие методы, как GetAllUsers().
В примере приложения Джоша Смита о MVVM он использует репозиторий, который вводится в конструктор каждой виртуальной машины.
public AllCustomersViewModel(CustomerRepository customerRepository)
Несмотря на то, что это должно быть общей проблемой, я не нашел удовлетворительного ответа на этот вопрос, как при подходе для небольших приложений (лучшие практики)?
Я думаю, что вызов ObjectContect непосредственно из метода в вашей модели просмотра означает, что если у вас нет хорошего метода GetAllUsers(), к которому можно получить доступ с помощью другой viewmodel (при необходимости). Если у вас нет такого требования, я думаю, что все в порядке. Вы можете обернуть создание экземпляра DatabaseEntities при использовании. Я думаю, что проблема, с которой вы столкнетесь с текущим рабочим процессом, - это управление обновлениями пользовательского интерфейса. Во-первых, вы используете IEnumerable вместо ObservableCollection, во-вторых, вы используете класс пользователя EF напрямую, а не обертываете его в виртуальную машину, которая реализует INPC. –
failedprogramming