2011-02-04 2 views
0

Хотелось бы услышать, что подходит для этой ситуации.WPF MVVM - создать модель из базы данных

Я использую приложение WPF Caliburn.Micro framework. Мне нужно иметь доступ к SQL Compact DB. В доступе к DB я использую LINQ TO SQL.

Например, у меня есть элемент управления comboBox или элемент управления listBox. Мне нужно загрузить элементы этих элементов управления из базы данных.

Поэтому я создаю простой класс при доступе к БД.

[Export(typeof(IDbManager))] 
public partial class DbManager : IDbManager 
{ 

    public IList<Spirit_Users> LoadSpiritUsers() 
    { 
     var result = from u in _dc.Spirit_Users orderby u.Nick select u; 
     return result.ToList(); 
    } 
} 

Я вставляю этот класс с помощью MEF для просмотра модели. Об использовании метода из класса при доступе к БД в моем классе модели просмотра при загрузке элементов в comboBox.

[Export(typeof(ILogOnViewModel))] 
public class LogOnViewModel : Screen, ILogOnViewModel, 
    IPartImportsSatisfiedNotification 
{ 
    [Import] 
    internal IDbManager DbManager { get; set; } 

    //this property is bind on listbox or comboBox 
    public BindableCollection<Spirit_Users> SpiritUsers 
    { 
     get { return _spiritUsers; } 
     set 
     { 
      _spiritUsers = value; 
      NotifyOfPropertyChange(() => SpiritUsers); 
     } 
    } 


    private void ConfigureSpiritUsers() 
    { 
     //load items from comboBox or listBox 
     var users = SettingsDbManager.LoadSpiritUsers(); 

     //add to the collection which is binded on control in view 
     if (users.Count > 0) 
     { 
      foreach (var user in users) 
      { 
       SpiritUsers.Add(user); 
      } 
     } 
    } 


    protected override void OnActivate() 
    { 
     ConfigureSpiritUsers(); 
     base.OnActivate(); 
    } 
} 

Я не знаю, если мое решение является правильным и наиболее подходящим в scenarion WPF приложения с MVVVM.

Также мне нужно создать операцию CRUD из класса модели вида в базу данных. Например, сохраните некоторые объекты/данные в базе данных.

Благодарим за совет.

ответ

1

Это выглядит отлично, в ConfigureSpiritUsers вы ссылаетесь SettingsDbManager, где это определено? Должно ли это быть DbManager?

Действительно, DbManager является SpiritUserRepository и может включать в себя другие операции CRUD как методы интерфейса и конкретные реализации. Пока ваши модели просмотра всегда работают против абстракций, тогда это нормально.

Кроме того, вы можете заполнить коллекцию SpiritUsers в одной строке с помощью this.SpiritUsers = new BindableCollection(users). Я бы также сделал тип SpiritUsers IObservableCollection<Spirit_User>, или еще лучше абстракцию Spirit_User (т. Е. ISpiritUser).

+0

SettingsDbManager - ошибка, это DbManager, я исправляю его. Да класс модели просмотра всегда работает с той же схемой БД. Хорошо, я реализую ваши советы, спасибо. –