数据存储
对于某些应用通常需要对数据进行持久化存储,在UWP中存在几种方式能够存储部分数据
- LocalSettings
提供对部分内置类型数据的Key-Value方式的存储,存取方便简单,不需要进行任何配置。但是能够保存的数据类型有限,适合存储应用的设置数据。
- StorageFile
即本地上的文件存储,好处是能够存储几乎任何序列化后的数据,存储结构自由,缺点是在于管理复杂。
- 数据库
适合于进行结构相同的数据的存储,好处是数据库具有非常成熟的数据存取操作方案,并且存在许多框架和工具能够简化开发过程,其缺点是在使用数据库前需要进行配置。
SQLite
对于日常的简单App,例如TodoList这一类,由于每个项目通常存在相同的数据结构,因此在存储TodoItem的时候常常使用数据库。 开发中首选的本地数据库通常是SQLite,它配置相对简单,并且不需要额外的数据库服务,数据服务和客户都在同一个进程中。
EntityFramework
EntityFramework将对数据的访问分为三层
- 概念层
对应用程序员可见,负责数据对象及其属性的访问
- 对应层
- 储存层
依照使用的数据库与不同的数据结构,负责实际对数据库的访问和SQL的产生
简单说,EntityFramework通过分层的方式简化了对数据库的操作过程
在UWP程序中使用EntityFramework + SQLite
更新Microsoft.NETCore.UniversalWindowsPlatform EntityFrameworkCore要求UniversalWindowsPlatform的版本在5.2.2或者更高
- 在项目资源管理器的References上右键 ? 管理NutGet程序包
- 找到Microsoft.NETCore.UniversalWindowsPlatform,进行更新
安装Entity Framework
- 工具 ? NutGet包管理器 ? 程序包管理控制台
- 运行
Install-Package Microsoft.EntityFrameworkCore.Sqlite
- 运行
Install-Package Microsoft.EntityFrameworkCore.Tools -Pre
创建数据模型 EntityFramework通过数据对应的类创建数据库 public class ItemTag
{
[Required]
public int ID {get; set;}
public string TagName {get; set;}
public List<Item> Items {get; set;}
}
public class Item
{
[Required]
public int ID {get; set;}
public int Value {get; set;}
public int TagID {get; set;}
public ItemTag Tag {get; set;}
} 接下来创建数据库上下文 public class MyDatabaseContext : DbContext
{
public DbSet<Item> Items {get; set;}
public DbSet<ItemTag> Tags {get; set;}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=file.db");
}
}
创建数据库
- 在项目中新建文本文件,名为App.config
在文件中填入以下内容 <configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.FileSystem.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="4.0.0.0" newVersion="4.0.1.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Overlapped" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="4.0.0.0" newVersion="4.0.1.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="4.1.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
工具 ? NutGet包管理器 ? 程序包管理控制台
- 运行
Add-Migration MigrationName
EntityFramework通过Migration来创建或者更新数据库,以及完成升级后可能的回滚操作。Migration产生后,可以在项目文件夹中看到Migration文件夹,其中存在代码文件,包含了数据库升级/降级时需要进行的操作,可以通过查看这些文件确保创建的数据库和你想要的是相同的。 我们希望在App开始运行时进行对本地数据库的更新操作(如果更新存在的话),因此在App.xaml.cs文件中,在App类的构造函数中调用特定方法 using Microsoft.EntityFrameworkCore;
public partial class App
{
public App()
{
using(var db = new MyDatabaseContext())
{
db.Database.Migrate();
}
}
}
数据库的使用 DBContext类已经封装了绝大多数对数据库的操作,包括增加,删除,修改,查询。 另外,EntityFramework能够将LINQ查询语句转换为SQL语句,因此可以在C#代码中放心使用LINQ查询数据库,而不用考虑LINQ相比SQL的性能上的差别。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|