微软WP7本地数据库之Sterling编程技巧(1)
Sterling是一款开源的嵌入式数据库软件。在本篇中,我们将分析如何把Sterling数据库集成到Windows Phone 7程序中及相应的编程技巧和注意事项。
一、创建MainViewModel
为了实现更加模块化的设计,我们将创建一个视图模型,用以封装上篇中定义的两个数据库表格。为简单起见,我们主要提供了数据加载方面的支持。使用MainViewModel的另一个原因是下载的示例程序中正是使用了这种系统架构方式。然而,请注意这个例子中并没有利用流行的MVVM设计模式。
列表1:定义主视图模型实现与Sterling数据库层的关联
- public class MainViewModel : INotifyPropertyChanged
- {
- public MainViewModel()
- {
- this.Groups = new ObservableCollection();
- this.Contacts = new ObservableCollection();
- }
- public ObservableCollection Groups { get; private set; }
- public ObservableCollection Contacts { get; private set; }
- public bool IsDataLoaded
- {
- get;
- private set;
- }
- public void LoadData()
- {
- bool hasKeys = false;
- foreach (var item in App.Database.Query())
- {
- hasKeys = true;
- break;
- }
- bool hasKeys2 = false;
- foreach (var item in App.Database.Query())
- {
- hasKeys2 = true;
- break;
- }
- if (!hasKeys && !hasKeys2)
- {
- _SetupData();
- }
- foreach (var item in App.Database.Query())
- {
- Groups.Add(item.LazyValue.Value);
- }
- foreach (var item in App.Database.Query())
- {
- Contacts.Add(item.LazyValue.Value);
- }
- this.IsDataLoaded = true;
- }
- private void _SetupData()
- {
- var groupData = new List()
- {
- new GroupViewModel() { GroupName = "GP1"},
- //others omitted…
- new GroupViewModel() { GroupName = "GP10"}
- };
- foreach (var item in groupData)
- {
- App.Database.Save(item);
- }
- var contactData = new List()
- {
- new ContactViewModel() { GroupId=1,Name="Name11",Email="Name11@hotmail.com",ThumbNail="/WP7SterlingLearning;Component/ThumbNails/11.jpg"},
- new ContactViewModel() { GroupId=1,Name="Name12",Email="Name12@hotmail.com",ThumbNail="/WP7SterlingLearning;Component/ThumbNails/12.jpg"},
- //others omitted…
- new ContactViewModel() { GroupId=10,Name="Name105",Email="Name105@hotmail.com",ThumbNail="/WP7SterlingLearning;Component/ThumbNails/105.jpg"}
- };
- foreach (var item in contactData)
- {
- App.Database.Save(item);
- }
- }
- public event PropertyChangedEventHandler PropertyChanged;
- private void NotifyPropertyChanged(String propertyName)
- {
- PropertyChangedEventHandler handler = PropertyChanged;
- if (null != handler)
- {
- handler(this, new PropertyChangedEventArgs(propertyName));
- }
- }
- }
很容易看出,上面代码的关键在于方法LoadData。在这个方法中,我们首先判断这两个表GroupViewModel和ContactViewModel是否已建立。如果已经建立,我们只需要用简单的Sterling查询操作填充两个集合;否则,我们调用另一个方法_SetupData生成新表中的记录。创建记录简单地对应于创建相关类的实例。最后,我们设置全局变量IsDataLoaded的值以方便随后的判断之用。
到目前为止,所有数据层相关编程已经完成。接下来,我们将介绍如何把Sterling集成到Windows Phone7应用程序中。
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。