您的位置:首页 > 数据库

[WP8本地数据库01]班级管理-创建数据库

2014-01-15 17:29 453 查看
WP8的本地数据库是面向对象型的数据库,所以他的表就是一个实现了System.ComponentModel.INotifyPropertyChanged和System.ComponentModelINotifyPropertyChanging接口,并标识System.Data.Linq.Mapping. TableAttribute特性的类

下面是一个班级表

1 /// <summary>
2 /// 班级表
3 /// </summary>
4  [System.Data.Linq.Mapping.Table]
5  public class Class:INotifyPropertyChanged, INotifyPropertyChanging
6  {
7          public event PropertyChangingEventHandler PropertyChanging;
8
9          public event PropertyChangedEventHandler PropertyChanged;
10 }


然后给班级表增加“编号”、“学年”、“班主任”,“序号”这几个字段

字段是通过定义标识System.Data.Linq.Mapping. ColumnAttribute的属性作为表的字段,并且要调用PropertyChanging,和PropertyChanged事件

对于Column特性,我要会经常设置的内容:

DbType:获取或设置数据库列的类型。

IsPrimaryKey:获取或设置一个值,该值指示该类成员是否表示作为表的整个主键或部分主键的列。

CanBeNull:获取或设置一个值,该值指示列是否可包含 null 值。

IsDbGenerated:获取或设置一个值,该值指示列是否包含数据库自动生成的值。

比如我要设置一个不自增、不为空的char(5)类型主键:

private string _ID;
/// <summary>
/// 属性的注释
/// </summary>
[Column(AutoSync=AutoSync.OnInsert, IsDbGenerated=false, CanBeNull=false, DbType="char(5)")]
public string ID
{
get { return this._ID; }
set
{
if (this._ID != value)
{
NotifyPropertyChanging();
this._ID = value;
NotifyPropertyChanged();
}
}
}


更多DbType的相关信息请访问:http://msdn.microsoft.com/zh-cn/library/system.data.linq.mapping.columnattribute.dbtype(v=vs.110).aspx

有关Column的其他内容,请访问http://msdn.microsoft.com/zh-cn/library/system.data.linq.mapping.columnattribute_properties(v=vs.110).aspx

一个完整的班级表

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data.Linq.Mapping;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace WP8DBStudy.DB
{
/// <summary>
/// 班级表
/// </summary>
[System.Data.Linq.Mapping.Table]
public class Class:INotifyPropertyChanged, INotifyPropertyChanging
{
public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

public event PropertyChangingEventHandler PropertyChanging;

private void NotifyPropertyChanging([CallerMemberName] String propertyName = "")
{
if (PropertyChanging != null)
{
PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
}
}

private int _OrderBy;
/// <summary>
/// 序号
/// </summary>
[Column(IsDbGenerated=true)]
public int OrderBy
{
get { return this._OrderBy; }
set
{
if (this._OrderBy != value)
{
NotifyPropertyChanging();
_OrderBy = value;
NotifyPropertyChanged();
}
}
}

private string _ID;
/// <summary>
/// 属性的注释
/// </summary>
[Column(AutoSync=AutoSync.OnInsert, IsDbGenerated=false, CanBeNull=false, DbType="NCHAR(5)")]
public string ID
{
get { return this._ID; }
set
{
if (this._ID != value)
{
NotifyPropertyChanging();
this._ID = value;
NotifyPropertyChanged();
}
}
}

private string _Grade;
/// <summary>
/// 学年
/// </summary>
[Column]
public string Grade
{
get { return this._Grade; }
set
{
if (this._Grade != value)
{
NotifyPropertyChanging();
this._Grade = value;
NotifyPropertyChanged();
}
}
}

private string _HeadTeacher;
/// <summary>
/// 班主任
/// </summary>
[Column]
public string HeadTeacher
{
get { return this._HeadTeacher; }
set
{
if (this._HeadTeacher != value)
{
NotifyPropertyChanging();
this._HeadTeacher = value;
NotifyPropertyChanged();
}
}
}

}
}


创建了表类,我们还没能直接使用,在WP8中是通过DataContext类的子类来作为一个代理类操作数据库的

public class DBContext : DataContext
{
public const string CONNET_STR = "Data Source='isostore:/db.sdf';Password='111111'";

public DBContext()
: base(CONNET_STR)
{
}

public Table<ClassTable> ClassTable;
}


类型为Table<T> 的公开字段就是表对象,字段名和类型名一样(不一样需要另外配置,暂不说)

数据库的链接字符串格式是:
Data Source='isostore:/<文件名>';Password='<密码>'


在App.xaml.cs文件的构造函数中使用如下代码创建数据库

using (DB.DBContext db = new DB.DBContext())
{
//不存在数据库的时候才创建新数据库,注意,如果修改了数据库的话,需要删除重新创建数据库
if (db.DatabaseExists() == false)
{
db.CreateDatabase();
}
}


下班了,今天就写创建数据库好了,接下来还有操作数据库,要注意的事项和高级应用(比如表间关系的设置),最终会完成一个辅助管理班级的app。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: