当前位置: 首页 > news >正文

uwp连接mysql数据库_[UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)...

原文:

[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

d8c0f9c98e3d275469d47018ff8802b7.png

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

d1a377b4a230c437fcd0ae0494e34cbd.png

安装EF:

1.同样使用命令来安装:Install-Package Microsoft.EntityFrameworkCore.Sqlite

2.应为我们以后维护数据也得用EF,所以还要安装工具包:Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

创建数据模版

在项目上添加一个或多个Class文件,这些Class类就是最后生成的数据库表。

1.数据表代码

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel.DataAnnotations;usingSystem.ComponentModel.DataAnnotations.Schema;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceDome.UWP.Models

{///

///设置数据表///

[Table(name: "AccountBook")]classAccountBook

{///

///设置编号列:不能为空、主键///

[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.数据上下文代码

usingjizhang.UWP.Models;usingMicrosoft.EntityFrameworkCore;usingSystem;usingSystem.Collections.Generic;usingSystem.Data.Common;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceDome.UWP.Services

{classEFdbContext:DbContext

{public DbSet books { get; set; }protected override voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)

{//配置数据库名

optionsBuilder.UseSqlite("FileName=jizhang.db");

}

}

}

2.说明

这个代码很少,主要说下:public DbSet books { get; set; }如果你在数据模型中没有指定表名的话就会使用这个名字来命名数据表。

还有就是你创建了多少个表就应该在这声明多少个这个格式属性,如果你不声明的话最后在数据库中不会出现没有声明的数据表了。

创建数据库

Warning:本文现在为止在UWP项目中使用EF Tools还是不能正常工作的。需要手动添加binding redirects(绑定重定向).

1.在项目中添加一个文本文件。命名为App.config

2.向文件中添加如下类容:

3.好了现在有了一个数据模型,你就可以使用migrations 来生成数据库文件了。

会在你的项目中自动添加一个migrations 文件夹

1)使用命令来生成:Add-Migration MyFirstMigration

MyFirstMigration你可以随意写,就是个名字罢了。(在这一步前最好编译一次项目,减少出错的几率。)

这一步命令在哪输入?小白都是懵逼的,就在上文用来安装EF框架的那个“程序包控制台”里输入就行了

2)如果你的数据模型改变了那么你得重新执行这个命令来更新数据库。

4.由于我们是在APP运行的设备上使用数据库,所以得在运行设备上创建数据库。不用担心会多次创建数据库只会在第一次运行的时候创建。

那我们要怎么把创建的MyFirstMigration转到数据库中呢?

5.你会发现编译过后还是没有数据库文件(%USERPROFILE%\AppData\Local\Packages\)

1)你会发现打开是这样的,简直是泪奔不可能每次找APP的东西都去打开清单文件复制包名。

29d7037dd9239bc332402923f8fd7f4e.png

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

68b850531cb8cabd3390ac1dca38ec3e.png

6.最后我们打开APP.xaml.cs文件在构造函数中添加下面的代码。

sealed partial classApp : Application

{///

///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().///

publicApp()

{this.InitializeComponent();this.Suspending +=OnSuspending;

//真正的创建数据库using (var db = newEFdbContext())

{

db.Database.Migrate();

}

}

}

1.好了我们的数据库就创建好了。

a5cd430dc83eea30593ddac962ff62d3.png

总结

差点忘了说了,如果你不执行Add-Migration MyFirstMigration命令,其他的工作你都做了那么最后也会生成数据库文件但是只有一个__EFMigrationsHistory表

下一篇我再说具体操作数据。

相关文章:

  • centos apache php mysql zend_Centos6.5+php+apache+mysql+zendguardloader环境安装
  • java =1 ==1_为什么在Java中-1右移1 = -1?
  • java commons-pool_apache commons-pool的配置参数
  • JAVA CP936编码转utf8_Java编码转换 - querychinesesto的个人空间 - OSCHINA - 中文开源技术交流社区...
  • java hssffont_Java HSSFFont.setBoldweight方法代碼示例
  • java怎样创建字符串列表_java第三季lt;6-5gt;:生成随机字符串列表并排序之实现...
  • java多表return语句吗_java – 需要一个return语句吗? – 新编码
  • java网格布局如何为空_Java 网格布局
  • java 反序列化php对象_Java对对象的序列化和反序列化
  • Java如何读写基本数据类型和对象_114.Java操作基本数据类型的流对象
  • java 内部类 调用函数_Java中内部类使用方法实战案例分析
  • java 线程中途返回一个值_Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?...
  • java ssh框架 session工厂如何配置连接orcale_【学习笔记】linux操作SSH互信的配置方法 ssh等效连接配置案例...
  • java异常博客讲解_Spock代码讲解-异常测试
  • JAVA websocket 没有关闭_如何在Java Spring Tomcat中快速关闭无响应的Websocket?
  • 深入了解以太坊
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【个人向】《HTTP图解》阅后小结
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Java方法详解
  • jdbc就是这么简单
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Shadow DOM 内部构造及如何构建独立组件
  • SQLServer之索引简介
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 高度不固定时垂直居中
  • 日剧·日综资源集合(建议收藏)
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 一些关于Rust在2019年的思考
  • C# - 为值类型重定义相等性
  • #define,static,const,三种常量的区别
  • #FPGA(基础知识)
  • #pragma once
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (13)Hive调优——动态分区导致的小文件问题
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (2022 CVPR) Unbiased Teacher v2
  • (39)STM32——FLASH闪存
  • (4.10~4.16)
  • (C语言)字符分类函数
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (分布式缓存)Redis哨兵
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (算法)求1到1亿间的质数或素数
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)setTimeout 和 setInterval 的区别
  • .NET 指南:抽象化实现的基类
  • .NET/C# 使窗口永不获得焦点
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net生成的类,跨工程调用显示注释
  • @PreAuthorize注解
  • @Repository 注解
  • [2]十道算法题【Java实现】