[UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)
前言
本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问。
准备:
Entity Framework Core(Entity Framework 7)下文将简称:EF
1.在UWP中使用EF需要更新Microsoft.NETCore.UniversalWindowsPlatform到大于“5.2.2”的版本。
2.直接在“程序包管理器控制台”输入命令来更新:Update-Package Microsoft.NETCore.UniversalWindowsPlatform

如果没有的话下图打开:建议保留在上图的位置

安装EF:
1.同样使用命令来安装:Install-Package Microsoft.EntityFrameworkCore.Sqlite
2.应为我们以后维护数据也得用EF,所以还要安装工具包:Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
创建数据模版
在项目上添加一个或多个Class文件,这些Class类就是最后生成的数据库表。
1.数据表代码
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Dome.UWP.Models
{
/// <summary>
/// 设置数据表
/// </summary>
[Table(name: "AccountBook")]
class AccountBook
{
/// <summary>
/// 设置编号列:不能为空、主键
/// </summary>
[Required,Key]
public int 编号 { get; set; }
public decimal 金额 { get; set; }
public DateTime 日期 { get; set; }
public string 备注 { get; set; }
public string 收支类型 { get; set; }
public string 标签名称 { get; set; }
public string 标签图标 { get; set; }
public string 标签备注 { get; set; }
public string 账户名称 { get; set; }
}
}
2.说明
代码中的[Table(name:"AccountBook")]指定数据表的名称,如果不指定的话会默认使用你定义的数据上下文中的属性命名表了(下文会提到),这里是演示下。
中文字段?不用在意这些细节。
还有编号public int 编号 { get; set; }上的[Required,Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)],前面2个在代码中有说明主要说下最后一个:
它的意思是就是“自增”的意思。
到这数据模型就创建完成了。
创建数据上下文
1.数据上下文代码
using jizhang.UWP.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Dome.UWP.Services
{
class EFdbContext:DbContext
{ public DbSet<AccountBook> books { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//配置数据库名
optionsBuilder.UseSqlite("FileName=jizhang.db");
}
}
}
2.说明
这个代码很少,主要说下:public DbSet<AccountBook> books { get; set; }如果你在数据模型中没有指定表名的话就会使用这个名字来命名数据表。
还有就是你创建了多少个表就应该在这声明多少个这个格式属性,如果你不声明的话最后在数据库中不会出现没有声明的数据表了。
创建数据库
Warning:本文现在为止在UWP项目中使用EF Tools还是不能正常工作的。需要手动添加binding redirects(绑定重定向).
1.在项目中添加一个文本文件。命名为App.config
2.向文件中添加如下类容:
<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>
3.好了现在有了一个数据模型,你就可以使用migrations 来生成数据库文件了。
会在你的项目中自动添加一个migrations 文件夹
1)使用命令来生成:Add-Migration MyFirstMigration
MyFirstMigration你可以随意写,就是个名字罢了。(在这一步前最好编译一次项目,减少出错的几率。)
这一步命令在哪输入?小白都是懵逼的,就在上文用来安装EF框架的那个“程序包控制台”里输入就行了
2)如果你的数据模型改变了那么你得重新执行这个命令来更新数据库。
4.由于我们是在APP运行的设备上使用数据库,所以得在运行设备上创建数据库。不用担心会多次创建数据库只会在第一次运行的时候创建。
那我们要怎么把创建的MyFirstMigration转到数据库中呢?
5.你会发现编译过后还是没有数据库文件<数据的位置>(%USERPROFILE%\AppData\Local\Packages\)
1)你会发现打开是这样的,简直是泪奔不可能每次找APP的东西都去打开清单文件复制包名。

2)所以建议在项目创建的时候改掉包名,并且把这个Packages文件夹创建快捷方式放桌面。

6.最后我们打开APP.xaml.cs文件在构造函数中添加下面的代码。
sealed partial class App : Application
{
/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{ this.InitializeComponent();
this.Suspending += OnSuspending;
//真正的创建数据库
using (var db = new EFdbContext())
{
db.Database.Migrate();
} }
}
1.好了我们的数据库就创建好了。

总结
差点忘了说了,如果你不执行Add-Migration MyFirstMigration命令,其他的工作你都做了那么最后也会生成数据库文件但是只有一个__EFMigrationsHistory表
下一篇我再说具体操作数据。
[UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)的更多相关文章
- [UWP小白日记-15]在UWP手机端实时限制Textbox的输入
说实话重来没想到验证输入是如此的苦逼的一件事情. 网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直 ...
- [UWP小白日记-9]页面跳转过度动画(二)
又打算动手写了 [UWP小白日记-6]页面跳转过度动画 上次写的,这次随着学习的进度使用新的玩法. 最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写 ...
- UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库
在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...
- Electron中使用sql.js操作SQLite数据库
推荐sql.js——一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...
- Android中操作SQLite数据库
我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些 ...
- ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...
- Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库
下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...
- [UWP小白日记-8]一些零碎的东西
设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...
- [UWP小白日记-6]页面跳转过度动画
前言 在学习中发现页面导航默认是没有过度动画的,直接就导航过去太粗暴了( ̄へ ̄),于是打算上动画结果不言而喻自己进了坑完全不懂动画,然后就是各种疯狂(´・_・`)的搜索资料看了后终于有点头绪. 再后来 ...
随机推荐
- 什么是Solr搜索
什么是Solr搜索 一.Solr综述 什么是Solr搜索 我们经常会用到搜索功能,所以也比较熟悉,这里就简单的介绍一下搜索的原理. 当然只是介绍solr的原理,并不是搜索引擎的原理,那会更复杂. ...
- asp.net MVC4 +MVCpager
asp.net MVC4 +MVCpager 无刷新分页 本人菜鸟,最近在用MVC4和MVCpager做无刷新分页时,发现点击下一页时数据不是Ajax提交的,弄了好久终于找到原因,原来还是Jquery ...
- mediawiki在windows下的安装
mediawiki在windows下的安装 对于刚接触wiki的朋友们来说,配置一个服务器环境,安装并运行mediawiki是一件很麻烦的事情,在这里,我尽量用通俗易懂的语言,介绍mw(mediawi ...
- Android项目--Json解析
在过去的一段时间里,我希望做一个天气的应用,但是由于老版的天气接口已经不能用了.只能更新到2014年3月4日. 不过有些东西,哪来学习一下,也是可以的. 比如:http://m.weather.com ...
- 序列化(ObjectOutputStream和ObjectInputStream)(切记:out是输出到本地中,in是输入到程序中)
注意:序列化自定义类必须实现一个接口Serializable,在c#中序列化自定义类是使用特性也就是[Serializable] //要实现序列化的类 public class Student imp ...
- S全选功能代码
JS全选功能代码优化 2014-06-26 00:00 by 龙恩0707, 470 阅读, 3 评论, 收藏, 编辑 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写 ...
- c# 如何显示图片指定位置
private void panel1_Paint(object sender, PaintEventArgs e) { Rectangle r1 = new Rectangle(0, 0, 100, ...
- Redis for Windows(C#缓存)配置文件详解
Redis for Windows(C#缓存)配置文件详解 前言 在上一篇文章中主要介绍了Redis在Windows平台下的下载安装和简单使用http://www.cnblogs.com/aehy ...
- IOS开发小功能2:二维码扫描界面的设计(横线上下移动)
效果图如上,实现的是一个二维码扫描界面. 下面我贴出线条上下移动的代码,至于二维码的代码是用的第三方库. 首先是整体的结构: 注意下面的库文件一个都不能少,否则会报错. TLTiltHighlight ...
- .NET并行计算基本介绍、并行循环使用模式
.NET并行计算基本介绍.并行循环使用模式) 阅读目录: 1.开篇介绍 2.NET并行计算基本介绍 3.并行循环使用模式 3.1并行For循环 3.2并行ForEach循环 3.3并行LINQ(PLI ...