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 开发人员能够使用面向对 ...
随机推荐
- 模板方法(Template Method)(父类声明算法骨架,子类具体不同实现)
在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...
- 【洛谷】P1554 梦中的统计
P1554 梦中的统计 题目背景 Bessie 处于半梦半醒的状态.过了一会儿,她意识到她在数数,不能入睡. 题目描述 Bessie的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数.她开始注意每一 ...
- pip list报错:DEPRECATION: The default format will switch to columns in the future.
一.现象: pip list 显示出以下错误: DEPRECATION: The default format will switch to columns in the future. Yo ...
- golang之Sprintf函数
- win7下装双系统win8安装及问题
配置:笔记本 联想S510p 准备:老毛桃UEFI版 8gU盘 win8 X64系统 问题1:出现 error 10099:invalid target partition specified ...
- DataIntputStream / DataOutputStream 类
1. DataInputStream类(熟悉) (1)基本概念 java.io.DataInputStream类用于读取java中的基本数据类型. (2)常用的方法 DataInputStre ...
- 如何高效的学习python
如何高效的学习python 假设到目前为止你已经知道Python或有一些学习它的方法,但是如果你喜欢我发现的不用几个月的时间就能迅速掌握其要领的学习语言的方法,那么这篇文章是为你准备的. 要避免的学习 ...
- 51nod1196 字符串的数量
用N个不同的字符(编号1 - N),组成一个字符串,有如下要求:(1) 对于编号为i的字符,如果2 * i > n,则该字符可以作为结尾字符.如果不作为结尾字符而是中间的字符,则该字符后面可以接 ...
- python的解释器类型
Python解释器 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规 ...
- Java中的TreeMap及红黑树
TreeMap: http://blog.csdn.net/tobeandnottobe/article/details/7232664 红黑树: http://blog.chinaunix.net/ ...