外地数据库(颠末 LINQ to SQL访问的 SQL Server Compact database)是一个运转在Windows Phone7.5 和8 上的数据访问API。
在微软的文档(列表 这是我的博客, 还有十分多有效的Windows Phone 外地数据库链接)中,总是在描画一个代码优先的Task流,诲人不倦地为Windows Mobile和桌面创建SQL Server Compact 数据库架构,而且它很难和你的App一块公布。我的Tools,可作为 SQL Server Tools箱 Visual Studio 插件,也可用于有SQL Server Compact 3.5Tools箱的轻易的单机版次序 (目前还是alpha版).两种状况都适用。当你不想在PC上安装Visual Studio时,单机版对 VS Express版用户很有效(这是个单一的exe文件,很随便公布)。
接下来,,我将应用Visual Studio 2012来演示,怎么应用SQL Server Compact Toolbox 取得一个已存在的SQL Server数据库,并把它作为内置Windows Phone数据库嵌入到一个新Windows Phone 8 App中。此操作分3步:为这个示例,我已经创建了一个新的 Windows Phone Databound App,并选择 Windows Phone OS 8.0 作为目标系统.
然后,使用Tools箱创建一个新的SQL Server Compact 3.5 数据库,保管到Phone工程地址的文件夹 (你可以用“Open Folder in File Explorer”上下文菜单)。
单击 Create,导航到工程文件夹,然后输出 PostCodes.sdf, 点击OK.
点击OK,一个新的空数据库会参与到Tools箱的数据库列表中:
现在,我们需求连接到SQL Server 数据库并生成脚本,然后在阿谁新的空数据库上实行此脚本。
用上面的Tools箱菜单项创建并保管数据库脚本,然后挨着PostCodes.sdf数据库文件,掀开SQL编辑器:
在编辑器中点击 Open 按钮,加载脚本,然后按下Execute按钮,运转脚本。
现在,一个包含PostCode表的数据库就创建了(脚本在这),这个表保管着丹麦一切的邮政编码。
最后一步是把数据库文件参与到 Phone工程里。在处置方案管理器中,选择“显示一切文件”,然后把 PostCodes.sdf参与工程。 在本示例中,我们渴望在Phone中,这个数据库是可写入的,因此,把它作为“嵌入本钱” 参与工程。--假设是 只读数据库,可以作为内容参与工程。为基于数据库生成DataContext,在Tools箱中点右键,选择“Add Windows Phone DataContext to current project ”
让我们看看这个对话框的选项 dialog:
Context name:生成DataContext的类名
Namespace: 可以为生成的代码指定不合的命名空间
Language: 可生成 C# 或 VB code.
Pluralize: 假设选中,会重命名表 (Person => People) 诸如此类.
Create a file per table: 但凡,只创建一个文件Normally
Add schema version table: 假设数据库文件可写,而且在以后的App版本中会应用到DatabaseSchemaUpdater 类,请选中此项。
Add rowversion column to all tables: 假设选中此项,将会确保在一切表中包含rowversion列(之前的时间戳),它能在实行UPDATE and DELETE时提高功用(参考我的博客 这里 和 这里)。
Include ConnectionStringBuilder: 会在工程中新建一个 LocalDatabaseConnectionStringBuilder类,能用风行的办法创建强类型的连接字符串。
关于这个示例,仅需单击OK,然后工程中会参与PostCodesContext.cs ,到此,我们就做完了。
最后,为了演示这个包含数据的App,修改MainPage.xaml的DataTemplate,就像下面:
<DataTemplate> <StackPanel Margin="0,0,0,17"> <TextBlock Text="{Binding Zip}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> <TextBlock Text="{Binding City}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/> </StackPanel> </DataTemplate>
用以下代码交流 MainPage.xaml.cs中的OnNavigatedTo工作处理:
protected override void OnNavigatedTo(NavigationEventArgs e) { using (PostCodesContext ctx = new PostCodesContext(PostCodesContext.ConnectionString)) { ctx.CreateIfNotExists(); ctx.LogDebug = true; MainLongListSelector.ItemsSource = ctx.PostCode.ToList(); } }
这个代码初始化一个新的PostCodesContext 实例,(包含在“using”中,它是Disposable). CreateIfNotExists 方法,从工程中提取PostCodes.sdf,并复制到隔离存储区。把LogDebug 设置为true,会在调试时在调试窗口中显示一切SQL定义文本:
SELECT [t0].[Id], [t0].[Zip], [t0].[City], [t0].[Street], [t0].[Company], [t0].[IsProvince], [t0].[rowguid] AS [Rowguid], [t0].[ts] AS [Ts] FROM [PostCode] AS [t0]
最后,调用ToList()实行SELECT并前去PostCodeTools列表,它被绑定到LongListSelector的ItemsSource 属性。
结果:让我们总结下这些方法的优点:
- 应用桌面数据库Tools用来操作数据和履行模型设计
- 在数据库表和 DataContext 类做 1:1 映照可以节省时间
- DataContext 类和实体类是可扩展的
- 生成的 DataContext 包含索引定义(SqlMetal 不支持,这是 Windows Phone 的扩展)
- 生成的 DataContext 包含 CreateIfNotExists 方法
- 生成的 DataContext 包含 LogDebug 属性,容许你在调试窗口反省生成的 SQL 语句
- 可将生成的 DataContext 类分红多个文件
- 可增加版本表,来支持模型的修正
- 可增加 rowversion 列里提升 UPDATE 和 DELETE 功用
- 可包含 ConnectionStringBuilder 类来构建一个强类型的连接字符串,应用低级的连接字符串选项
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务