Обновите базу данных из коллекции ObservableCollection - PullRequest
2 голосов
/ 14 февраля 2012

В настоящее время я работаю с EnterpriseLibrary 5.0 и MVVM:

У меня есть свойство ObservableCollection ListCategories<Category>, привязанное к редактируемому ComboBox (я могу добавлять / удалять / редактировать категории):

У меня естьследующий код:

public ObservableCollection<Category> ListCategories
        {
            get
            {
                return listCategories;
            }

            set
            {
                listCategories = value;
            }
        }
    var categories = sdb.ExecuteSprocAccessor <Category> ("Get_Categories_List");

                 ListCategories = categories.ToObservableCollection <Category>();

Мой вопрос:

После всех изменений, внесенных в коллекцию, как обновить базу данных?

Спасибо

1 Ответ

1 голос
/ 14 февраля 2012

Правильный способ - создать слой доступа к БД за шаблоном репозитория:

public interface IRepository<T>
{
   IEnumerable<T> GetAll();
   T GetById(int id);
   void Save(T saveThis);
   void Delete(T deleteThis);
}

, а затем реализовать его с типом вашего домена Категория (я предполагаю, что это тип домена, а не сгенерированный типс помощью ORM.

public interface ICategoryRepository : IRepository<Category>
{
    // add any methods that are needed to act on this specific repo
}

затем установите зависимость в ViewModel в этот ICategoryRepository;

private readonly ICategoryRepository _categoryRepo;

public ViewModel(ICategoryRepository categoryRepo)
{
    _categoryRepo = categoryRepo;
}

Затем действуйте по этой зависимости из вашей ViewModel, ваш ViewModel НЕ ДОЛЖЕН вызывать базу данныхпрямо то, что вы, по-видимому, имеете в виду.

ваш код:

sdb.ExecuteSprocAccessor <Category> ("Get_Categories_List");

должен находиться в GetAll () хранилища. Переместите его из ViewModel.

Ваша настройка наблюдаемой коллекции должна быть сделана в ctr:

ListCategories = categories.ToObservableCollection <Category>();

по этому:

public ViewModel(ICategoryRepository categoryRepo)
{
    _categoryRepo = categoryRepo;
    var categories = _categoryRepo.GetAll();
    ListCategories = categories.ToObservableCollection <Category>();
}
...