MVVM和DBContext - 如何将它组合在一起?

时间:2012-06-17 09:36:51

标签: wpf mvvm ado.net-entity-data-model dbcontext

我正在尝试遵循MVVM模式,但是我在这个问题上花了一些时间,搜索了很多并检查了stackoverflow ...到目前为止还没有找到工作示例。

基本上,我有一个简单的应用程序,想要检索和写入SQL服务器的数据。这是我的代码:

//模型

public class Visitor
{
    public string ID { get; set; }


    public string FirstName { get; set; }

    public string LastName { get; set; }
}

//视图模型

public class VisitorViewModel : ViewModelBase
{
    public ObservableCollection<Visitor> _visitorDataCollection = new ObservableCollection<Visitor>();

    public ObservableCollection<Visitor> VisitorDataCollection
    {
        get { return _visitorDataCollection; }
        set { _visitorDataCollection = value; }
    }

    private string _firstName = "";
    private string _lastName = "";



    public string FirstName
    {
        get { return _firstName; }
        set
        {
            if (value != _firstName)
            {
                _firstName = value;
                OnPropertyChanged("FirstName");
            }
        }
    }

    public string LastName
    {
        get { return _lastName; }
        set
        {
            if (value != _lastName)
            {
                _lastName = value; 
                OnPropertyChanged("LastName");
            }
        }
    }

    public VisitorViewModel()
    {

    }
}

}

//表示数据库上下文的VisitorContext类

public partial class VisitorContext : DbContext
{
    public VisitorContext()
        : base()
    {
    }

    public DbSet<VISITOR> Visitors { get; set; }

}

}

没什么好看的。但是,我不能把它“放在一起”。如何完成检索所有访问者并添加新访问者?

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

只是一个简单的例子,说明如何实现这一切。

向VM添加一些命令:

public ICommand Add {get; private set;}

在构造函数中:

public VisitorViewModel()
{
   using(var context = new VisitorContext()) 
   {
       //fill collection with initial data from DbContext
       context.Visitors.ToList().ForEach(_visitorDataCollection.Add);
   }
   //setup add command, here I'm using MVVM Light like you 
   Add = new RelayCommand(()=> {
          using(var context = new VisitorContext()) 
          {
             _visitorDataCollection.Add(context.Visitors.Add(new Visitor {
                 FirstName = this.FirstName,
                 LastName = this.LastName //read values from model properties
             });
          }
       });
}

就是这样,您需要做的就是将此ViewModel绑定到适当的View。