wp7可以在独立存储区里创建数据库,但并不是非常简单,起码对于silverlight里的Linq to sql 类来说算是复杂的了。
在silverlight里,可以先外面定义好数据库,然后通过linqtosql类自动在逻辑代码里映射出对应的实体类和上下文类;
而在wp7里,要先在逻辑代码里定义好实体类、上下文类,然后通过创建上下文类的实例来在独立存储区里创建数据库。
不废话,直接上代码,该说的都已经在注释里了:
View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Net; 5 using System.Windows; 6 using System.Windows.Controls; 7 using System.Windows.Documents; 8 using System.Windows.Input; 9 using System.Windows.Media; 10 using System.Windows.Media.Animation; 11 using System.Windows.Shapes; 12 using Microsoft.Phone.Controls; 13 14 using System.Data.Linq; 15 using System.Data.Linq.Mapping; 16 17 namespace IsoStore 18 { 19 public partial class MainPage : PhoneApplicationPage 20 { 21 //定义链接字符串。isostore:/ 表示位于独立存储区里 file.sdf 表示数据库的名字 22 static string connectionString = "Data Source='isostore:/file.sdf'"; 23 24 // 构造函数 25 public MainPage() 26 { 27 InitializeComponent(); 28 this.button1.Click += new RoutedEventHandler(button1_Click); 29 30 //创建上下文类(数据链接)的实例——对应着具体的数据库 31 using(StuContext stuCent = new StuContext(connectionString)) 32 { 33 34 //stuCent.DeleteDatabase();删除数据库 35 36 //如果数据库不存在就创建 37 if (!stuCent.DatabaseExists()) 38 { 39 //创建数据库,同时创建数据库里的表 40 stuCent.CreateDatabase(); 41 42 } 43 } 44 45 } 46 47 48 void button1_Click(object sender, RoutedEventArgs e) 49 { 50 using (StuContext stuCent = new StuContext(connectionString)) 51 { 52 Stu stu1 = new Stu(); //实体类的一个实例,相当于数据库表里的一条数据 53 54 //给实体类的StuName赋值。StuID不用赋值,它是由数据库自动赋值的,IsDbGenerated = true 55 stu1.StuName = "小白2号"; 56 57 //把stu1插入到 Students表里。这一步只是插入到内存里的副本 58 stuCent.Students.InsertOnSubmit(stu1); 59 60 //这里才是真正把对数据库的修改写进数据库 61 stuCent.SubmitChanges(); 62 } 63 } 64 65 66 67 //定义一个实体类,数据库里每张表都要一个实体类相对应映射 68 //[Table(Name = "Student")] 表示该类映射成数据库里的一张表,表名为 student。 69 //如果Table没有Name特性,则用实体类的名字作为表名 70 [Table(Name = "Student")] 71 public class Stu 72 { 73 //定义类的属性,映射到表的列。特性 IsPrimaryKey 表明是否为主键, 74 //IsDbGenerated表示是否自增长(若值为true则有数据库自动赋值) 75 [Column(IsPrimaryKey = true, IsDbGenerated = true)]// CanBeNull = false, AutoSync = AutoSync.OnInsert) 76 public int StuID { set; get; } 77 78 //定义类的属性 79 [Column(CanBeNull = true)] 80 public string StuName { set; get; } 81 } 82 83 84 85 //定义上下文类,亦即是数据链接。该类的实例才是对应着具体的数据库 86 //该类继承DataContext,重点在于父类的内容,核心内容都在父类里实现了 87 public class StuContext:DataContext 88 { 89 //构造函数,同时调用基类构造函数,使用相同的链接字符串作为参数。 90 public StuContext(string connectionString) 91 : base(connectionString) 92 { } 93 94 //定义属性。从该属性的类型可以明显看出这对应着数据库的一张表 95 public Table<Stu> Students; 96 97 } 98 } 99 }
在这里推荐一个管理wp7独立存储区的工具——isostoreSpy,这工具可是灰常强大,具体使用也很简单,有机会再说