2019-9-30-WPF-运行时迁移-EF-Core-数据库
title | author | date | CreateTime | categories |
---|---|---|---|---|
WPF 运行时迁移 EF Core 数据库
|
lindexi
|
2019-09-30 20:19:16 +0800
|
2019-09-30 17:56:38 +0800
|
WPF
|
在客户端开发,可以使用 .NET Core 3.0 开发 WPF 程序,可以使用 EF Core 连接数据库。客户端的数据库使用 SQLite 在不同的版本需要在客户端运行做数据库迁移升级数据库
在 WPF 使用 EF Core 可以安装下面的库
- <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.0.0" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0">
- <PrivateAssets>all</PrivateAssets>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
- </PackageReference>
- <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0"/>
- <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" />
先创建一个 Model 类,在这个类里面需要添加 Id 属性,如创建资源类
- public class ResourceModel
- {
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public string Id { set; get; }
- public string ResourceId { set; get; }
- public string ResourceName { set; get; }
- public string LocalPath { set; get; }
- public string ResourceSign { set; get; }
- public string ResourceFileDetail { set; get; }
- }
然后创建数据类,用于连接数据库
- public class KekairwuceeYernellijewhebere : DbContext
- {
- public DbSet<ResourceModel> ResourceModel { get; set; }
- /// <inheritdoc />
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- var file = Path.Combine("FileManger.db");
- file = Path.GetFullPath(file);
- optionsBuilder
- .UseSqlite($"Filename={file}");
- }
- }
重写 OnConfiguring 方法在里面写连接方法,此时就完成了数据定义,但是还没有创建数据库
使用命令行进行数据库迁移,数据库迁移就是创建数据库相关代码,在第一次进行迁移将会自动创建代码用于创建数据库
- dotnet ef migrations add 版本名
上面代码的版本名可以随意命名,如我是这样写
- dotnet ef migrations add Lindexi
执行上面代码可以看到在项目里面添加了 Migrations 文件夹,这个文件夹里面包含数据库的迁移代码
在主函数可以使用下面代码创建数据库,如果数据库已经创建了那么将什么都不做
- using (var kekairwuceeYernellijewhebere = new KekairwuceeYernellijewhebere())
- {
- kekairwuceeYernellijewhebere.Database.Migrate();
- }
如果只是一次性创建,之后不执行修改的,可以使用 EnsureCreated 函数创建,请看下面代码
- using (var kekairwuceeYernellijewhebere = new KekairwuceeYernellijewhebere())
- {
- kekairwuceeYernellijewhebere.Database.EnsureCreated();
- }
注意使用 EnsureCreated 函数创建之后,将在下次调用 Database.Migrate 函数时提示下面代码
Microsoft.Data.Sqlite.SqliteException:“SQLite Error 1: 'table "ResourceModel" already exists'.”
如果软件更新了,需要修改 ResourceModel 的内容,添加一个属性
- public class ResourceModel
- {
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- public string Id { set; get; }
- public string ResourceId { set; get; }
- + public string WaircegalhallwayneeHuwairfejaije { set; get; }
- public string ResourceName { set; get; }
- public string LocalPath { set; get; }
- public string ResourceSign { set; get; }
- public string ResourceFileDetail { set; get; }
- }
那么在修改代码之后,再次执行迁移命令
- dotnet ef migrations add 版本名
此时建议创建迁移代码,在软件运行的时候执行 Migrate 函数将会自动升级数据库
如果数据库是需要升级的,那么请使用 Database.Migrate 函数创建数据库,之后可以在访问数据库之前调用这个函数让数据库如果没有更新就自动更新
每次调用 Migrate 都需要一定的时间,建议在另一个线程运行
2019-9-30-WPF-运行时迁移-EF-Core-数据库的更多相关文章
- [翻译 EF Core in Action 2.3] 理解EF Core数据库查询
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- EF Core 数据库迁移(Migration)
工具与环境介绍 1.开发环境为vs 2015 2.mysql EF Core支持采用 Pomelo.EntityFrameworkCore.MySql 源代码地址(https://github. ...
- .net core2.1 - ef core数据库迁移,初始化种子数据
起因:早上偶然看见一篇文章说是ef core(2.x)使用种子数据,主表子表迁移时候,正常情况下说是无法迁移成功,索性就试试,结果是和ef6的一样,没感觉有什么大的区别.一切OK,见下面内容. 1.首 ...
- .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”
一. 问题说明 最近.Net EF core 程序部署到服务器,服务器数据库安装的是SQL server 2008 R2,我本地用的的是SQL server 2014,在用到分页查询时报错如下: H ...
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
ASP.NET Boilerplate 学习 1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...
- 第九节:EF Core各种迁移指令(CodeFirst和DBFirst)
一. CodeFirst模式指令 1.前提: 必须的程序集: Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.Des ...
- 深入理解 EF Core:EF Core 读取数据时发生了什么?
阅读本文大概需要 11 分钟. 原文:https://bit.ly/2UMiDLb 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能 ...
- 深入理解 EF Core:EF Core 写入数据时发生了什么?
阅读本文大概需要 14 分钟. 原文:https://bit.ly/2C67m1C 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能 ...
- asp.net EF core 系列 作者:懒懒的程序员一枚
asp.net core 系列 19 EFCore介绍写作逻辑一 .概述1.1 比较EF Core 和EF61.2 EF Core数据库提供程序 1.3 引用程序添加数据库提供程序1.4 获取Enti ...
- 第一节:EF Core简介和CodeFirst和DBFirst两种映射模式(以SQLite和SQLServer为例)
一. EF简介 1. 定义 Entity Framework (EF) Core 是轻量化.可扩展.开源和跨平台的数据访问技术,它还是一种对象关系映射器(ORM),它使.NET 开发人员能够使用面向对 ...
随机推荐
- linux追加中文字库,解决imagemagick 中文乱码的问题。
Windows下的字体丰富多样,而且显示的工整.漂亮. 所以自己想把windows上的字体移到Ubuntu下来.Windows下字体库的位置为C:\Windows\fonts,这里面包含所有windo ...
- 手机号测吉凶python代码
根据数理数来测电话后四位吉凶: 数理数 解释批注 0点特殊.......大吉 1大展鸿图.可获成功吉 2一盛一衰.劳而无功凶 3蒸蒸日上.百事顺遂吉 4坎坷前途.苦难折磨凶 5生意欣荣.名利双收吉 6 ...
- 浅谈mybatis中#{}和${}的区别
#{}:表示占位符,如果获取简单类型,#{}中可以使用value或其它名称.有效防止sql注入.使用#{}设置参数无需考虑参数的类型. 如果使用#{}比较日期字段,select* from table ...
- 【python之路20】函数作为参数
1.函数可以作为参数 1)函数名相当于变量指向函数 2)函数名后面加括号表示调用函数 #!usr/bin/env python # -*- coding:utf-8 -*- def f1(args): ...
- hihocoder1317 :搜索四·跳舞链
精确覆盖问题是指对于给定的一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1. //Achen #include<algorithm> #include< ...
- Linux下备份Mysql所有数据库
需求:备份除了mysql系统数据库的所有数据库 以下为Shell脚本,只需要修改用户密码即可 MYSQL_USER=root MYSQL_PASS=123456 MYSQL_CONN="-u ...
- systemd管理nginx
首先安装nginx,此处不做赘述. 保存以下内容到/lib/systemd/system/nginx.service文件. [Unit] Description=The NGINX HTTP and ...
- Java.控制层.响应工具类.
Java.控制层.响应工具类. package cn.com.spdbccc.cds.index.web.base; public class ApiResponse { private int co ...
- [Vue CLI 3] public 目录没用吗
在 vue-cli 3 初始化的项目根目录下面:和 src 同级有一个 public 目录 官网的说明如下:https://cli.vuejs.org/zh/guid... 在下列情况下使用: 你需要 ...
- Collection Iterator 迭代器
Collection c=new ArrayList(); c.add(123); //迭代器遍历集合 Iterator i=c.Iterator(); while(i.hasNext()) { Sy ...