在MVVM中使用数据库建模

时间:2012-05-13 23:30:22

标签: c# database sqlite mvvm

您好我正在尝试学习MVVM,我对某些部分有点不确定,主要是(数据)模型需要与VM通信的部分(ViewModel)。

所以我有一个班级人员,它有很多属性(使用Raiseproperty(INotifyPropertyChanged))。现在我如何将该类连接到VM我将创建一个新类并将其称为ViewModelPerson,但我主要想要一个人员列表,因为只显示一个人有点无用,该列表将从数据库中收集(SQLite与Dapper。现在我需要在viewmodel或(data)模型中创建可观察列表?我想在ViewModel中,因为我需要将它绑定到View,但是我在哪里将数据库信息插入到ViewModel ObservableCollection中?我是否将它放在构造函数中,如ViewModelPersonsList构造函数,它具有一个Query以从SQlite DB收集所有人并将其插入列表中???

希望您了解我未能理解MVVM模型的地方,如果有什么不清楚的地方请问,我会尝试更好地解释我的问题。

马克西姆

2 个答案:

答案 0 :(得分:1)

查看 - >查看模型 - >业务逻辑 - >数据层 - > DB

OR

查看 - >查看模型 - > WCF / Web服务 - >业务逻辑 - >数据层 - > DB

如果您的视图模型需要Person对象列表,那么它应该调用您的业务逻辑层,并且您的BLL将围绕调用数据层实现必要的逻辑。您的BLL返回列表,您的VM通过绑定使其可用于视图。

更新 Person对象的工作方式相同。 VM只使用更新的对象调用BLL。

答案 1 :(得分:1)

由于我看到你提到了Sqlite,我假设你在谈论小型WPF项目。

我建议你创建一个映射到你的数据库的实体框架代码优先模型(阅读this)。

如果你想使用SQL Server Compact Edition,你甚至可以拥有数据库generated for you(这也可以通过Sqlite实现,但需要付出更多努力)。

无论如何,您可以使用生成的(或编码的)DbContext作为UoW对象。

您可以选择通过DAL单独处理数据,也可以直接从ViewModel处理数据。

任何情况下,我会说创建两个ViewModel基类,一个暴露TEntity,另一个暴露TEntity集合。 如果您选择在VM中执行DAL操作,则可以将CRUD方法添加到基础CollectionViewModel上,然后手动调用或让用户通过公开命令调用它。