您的位置:首页 > 数据库

wp7独立存储之本地数据库

2012-04-17 22:13 197 查看
wp7可以在独立存储区里创建数据库,但并不是非常简单,起码对于silverlight里的Linq to sql 类来说算是复杂的了。

在silverlight里,可以先外面定义好数据库,然后通过linqtosql类自动在逻辑代码里映射出对应的实体类和上下文类;

而在wp7里,要先在逻辑代码里定义好实体类、上下文类,然后通过创建上下文类的实例来在独立存储区里创建数据库。

不废话,直接上代码,该说的都已经在注释里了:

View Code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

using System.Data.Linq;
using System.Data.Linq.Mapping;

namespace IsoStore
{
public partial class MainPage : PhoneApplicationPage
{
//定义链接字符串。isostore:/ 表示位于独立存储区里 file.sdf 表示数据库的名字
static string connectionString = "Data Source='isostore:/file.sdf'";

// 构造函数
public MainPage()
{
InitializeComponent();
this.button1.Click += new RoutedEventHandler(button1_Click);

//创建上下文类(数据链接)的实例——对应着具体的数据库
using(StuContext stuCent = new StuContext(connectionString))
{

//stuCent.DeleteDatabase();删除数据库

//如果数据库不存在就创建
if (!stuCent.DatabaseExists())
{
//创建数据库,同时创建数据库里的表
stuCent.CreateDatabase();

}
}

}

void button1_Click(object sender, RoutedEventArgs e)
{
using (StuContext stuCent = new StuContext(connectionString))
{
Stu stu1 = new Stu(); //实体类的一个实例,相当于数据库表里的一条数据

//给实体类的StuName赋值。StuID不用赋值,它是由数据库自动赋值的,IsDbGenerated = true
stu1.StuName = "小白2号";

//把stu1插入到 Students表里。这一步只是插入到内存里的副本
stuCent.Students.InsertOnSubmit(stu1);

//这里才是真正把对数据库的修改写进数据库
stuCent.SubmitChanges();
}
}

//定义一个实体类,数据库里每张表都要一个实体类相对应映射
//[Table(Name = "Student")] 表示该类映射成数据库里的一张表,表名为 student。
//如果Table没有Name特性,则用实体类的名字作为表名
[Table(Name = "Student")]
public class Stu
{
//定义类的属性,映射到表的列。特性 IsPrimaryKey 表明是否为主键,
//IsDbGenerated表示是否自增长(若值为true则有数据库自动赋值)
[Column(IsPrimaryKey = true, IsDbGenerated = true)]// CanBeNull = false, AutoSync = AutoSync.OnInsert)
public int StuID { set; get; }

//定义类的属性
[Column(CanBeNull = true)]
public string StuName { set; get; }
}

//定义上下文类,亦即是数据链接。该类的实例才是对应着具体的数据库
//该类继承DataContext,重点在于父类的内容,核心内容都在父类里实现了
public class StuContext:DataContext
{
//构造函数,同时调用基类构造函数,使用相同的链接字符串作为参数。
public StuContext(string connectionString)
: base(connectionString)
{ }

//定义属性。从该属性的类型可以明显看出这对应着数据库的一张表
public Table<Stu> Students;

}
}
}


在这里推荐一个管理wp7独立存储区的工具——isostoreSpy,这工具可是灰常强大,具体使用也很简单,有机会再说
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: