[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表

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

时间: 2024-10-11 00:52:32

[UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)的相关文章

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

说实话重来没想到验证输入是如此的苦逼的一件事情. 网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直接把Textbox的属性InputScope设置为"Number"就是了,反正在目前版本的UWP中纯数字键盘还无法切换到其他的字符键盘去 下面的代码是一个金额文本框的验证,算是抛砖引玉吧.欢迎还有更好的方案指点! 直接上代码: /// <summary> /// 检查输入金额,当检测到

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

一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite C代码,将SQLite移植到Webassembly. 它使用存储在内存中的虚拟数据库文件,因此不会保留对数据库所做的更改. 但是,它允许您导入任何现有的sqlite文件,并将创建的数据库导出为JavaScript类型的数组. 这里没有C绑定或node-gyp编译,sql.js是一个简单的JavaScript文件,可以像任何传统的JavaScript

[UWP小白日记-2]SQLite数据库DOME

数据库说简单点就是增删改查,但是对新手来说也是要爆肝的.作为一个新手爆肝无数次啊, 血的教训啊现在UWP的教程又少,说多了都是泪.留下来免得以后又爆肝.还有:一定要写注释!一定要写注释!一定要写注释! 重要的事情说三遍! 1.首先,准备工作: 1)引用: 获取途径:VS里的扩展和更新.NuGet等. 2)数据库模型: 1 internal class ACCOURT 2 { 3 public ACCOURT() { } //空构造函数 4 public ACCOURT(int ID,double

[UWP小白日记-3]记账项目-1

学了一段时间的UWP,来个项目试试手. 本来是想边做边学MVVMLight的结果感觉MVVM对于萌新来说太高难,以后再把这个项目改造成MVVMLight框架的项目. 下面进入正题. 中间那快空白打算放gridview,用来放标签.利用DataTemplate读取数据库里的标签表. 头部标题和底部标签没什么好说的,主要说下那个pivot的实现. 先来看看图,就知道有什么问题了,然后在解决这个问题. 鼠标点最左边尽然也能跳转页面,这什么鬼,改了他的默认Styel一样不行. 1 <Style x:Ke

[UWP小白日记-7]转换MVA学院的XML字幕为SRT (二)

瞎扯淡 上个版本,非常蠢用来N多的循环导致非常卡性能烂得不行,这次使用XmlDocument类来读取XML字幕 其实根本不用各种扒XML字幕,好吧我这是学习使用XmlDocument类,嗯就是这个样子的.(⊙﹏⊙)b , 正文 其实这个小程序,关键就是读取文件的时候要正确的转码,应为系统TXT文本默认使用的是ANIS编码,而XmlDocument使用的是UTF8. 不转码妥妥的乱码. 先来看下成品,最后我会打包为APP供大家使用的.(GIF录制工具ScreenToGif,开源并且使用的是WPF开

[UWP小白日记-1]判断APP是否是第一次运行初始化SQLITE数据库

利用应用程序设置来实现此功能. 1.首先,获取APP设置的容器: ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; 由于获取容器的时候并没有给key为FirestStart的赋值,所以下面就直接判断是不是为null,为null就是第一次运行APP, 然后在else里给key为FirestStart的赋值,那么else的代码就只能执行一次了.当然以后在UI上可以添加一个switchButt

[UWP小白日记-3]记账项目-2

手机端: PC端: 待续……

[UWP小白日记-14]正则表达式

匹配浮点数: ^(([1-9]+[0-9]*.{1}[0-9]+)|([0].{1}[1-9]+[0-9]*)|([1-9][0-9]*)|([0][.][0-9]+[1-9]*))$ 匹配2位浮点数:^(([1-9]+[0-9]*.{1}[0-9]{1,2})|([0].{1}[1-9]+[0-9]{1,2})|([1-9][0-9]{1,2})|([0][.][0-9]+[1-9]{1,2}))$ 来自为知笔记(Wiz)

[UWP小白日记-4]记账项目-2

手机端: 待续…… 哈哈这个代码真是好长时间啊,没办法萌新你们都懂的,UI是改了又改,知识也在慢慢积累, 所以这效率就低下了点 UI是改了又改,代码是不断了改,所以搞到现在都没开发完成