前言

  本文中,您将创建一个通用应用程序(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数据库(一)的更多相关文章

  1. [UWP小白日记-15]在UWP手机端实时限制Textbox的输入

    说实话重来没想到验证输入是如此的苦逼的一件事情.     网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直 ...

  2. [UWP小白日记-9]页面跳转过度动画(二)

    又打算动手写了 [UWP小白日记-6]页面跳转过度动画 上次写的,这次随着学习的进度使用新的玩法. 最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写 ...

  3. UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库

    在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...

  4. Electron中使用sql.js操作SQLite数据库

    推荐sql.js——一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...

  5. Android中操作SQLite数据库

    我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些 ...

  6. ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)

    本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...

  7. Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库

    下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...

  8. [UWP小白日记-8]一些零碎的东西

    设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...

  9. [UWP小白日记-6]页面跳转过度动画

    前言 在学习中发现页面导航默认是没有过度动画的,直接就导航过去太粗暴了( ̄へ ̄),于是打算上动画结果不言而喻自己进了坑完全不懂动画,然后就是各种疯狂(´・_・`)的搜索资料看了后终于有点头绪. 再后来 ...

随机推荐

  1. Mysql高级之主从复制

    原文:Mysql高级之主从复制 主从复制不就是多台服务器嘛!,一个改变另一个也改变啦,内容其实都一样! 原理: 对数据库进行操作会生成一个文件,binlog(二进制文件),从服务器配置relaylog ...

  2. ios中mvc的FormsAuthentication.SetAuthCookie(cookieUserName, false)失败

    如果楼主使用.net开发,要注意FormsAuthentication.SetAuthCookie 方法的使用会导致ios出现该问题.因为这个方法在ios设备上是把票据加入到url中,导致url和你的 ...

  3. [java]SpringMVC+Swagger实现自动接口

    项目使用SpringMVC+Maven 1.在站点项目的POM文件中引入Swagger的jar包 <properties> <project.build.sourceEncoding ...

  4. Sqoop自定义多字节列分隔符

    Sqoop提供的--fields-terminated-by选项可以支持指定自定义的分隔符,但是它只支持单字节的分隔符,对于我们特殊的需求:希望使用双字节的“|!”,默认的是不支持的. Sqoop在进 ...

  5. 监控系统Opserver

    监控系统Opserver的配置调试   Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们 ...

  6. pearl(二分查找,stl)

    最近大概把有关二分的题目都看了一遍... 嗯..这题是二分查找...二分查找的代码都类似,所以打起来会水很多 但是刚开始打二分还是很容易写挂..所以依旧需要注意 题2 天堂的珍珠 [题目描述] 我有很 ...

  7. 【Apache ZooKeeper】命令行zkCli.sh使用指南

    ZooKeeper命令行 原文                   http://blog.csdn.net/ganglia/article/details/11606807 ZooKeeper客户端 ...

  8. dtrace sample

    #!/usr/sbin/dtrace -s #pragma D option flowindent /* monitor file open */ syscall::open:entry { prin ...

  9. SharePoint开发

    做SharePoint开发有时候是一件比较痛苦的事情,毕竟庞大的框架总是笨重的~~ 往往如果采取传统的方式开发SharePoint的话,更改一个代码需要有以下操作: 1)更改代码 2)VS编译——&g ...

  10. 从异步更新进度想起的事儿——IProgress

    今天,在群里向大家请教了这样一个问题:“两个对象(类.窗体或什么)之间,要完成比较频繁的报告进度更新都有哪些好的方式”,Somebody 跳出来给出了个“IProgress”,没了解过,后面围绕着它讨 ...