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 开发人员能够使用面向对 ...
随机推荐
- 想真正了解JAVA设计模式看着一篇就够了。 详解+代码实例
Java 设计模式 设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结 设计模式分为 23 种经典的模式,根据用途我们又可以分为三大类.分别是创建型模式.结构型模式和行为型模式 列举几种设 ...
- 模拟4题解 T3奇袭
T3奇袭 题目描述 由于各种原因,桐人现在被困在Under World(以下简称UW)中,而UW马上 要迎来最终的压力测试——魔界入侵. 唯一一个神一般存在的Administrator被消灭了,靠原本 ...
- Windows 调用OpenProcess失败
OpenProcess 打开|获得进程句柄 函数原型: HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwPro ...
- 关于本地文件请求json文件
因为需要用到json数据格式,上网查了一下例子之后我就想本地测试一下看能不能成功. 结果,chrome下没有任何反应,打开控制台之后报错如下: XMLHttpRequest cannot load f ...
- ListView设置的点点滴滴
去掉ListView的分界线 1. ListView的属性Divider设为#FFCC00 这种对任何背景都适用 2. 把ListView的属性Divider设为和背景一样的颜色 3.and ...
- git 报错:没有权限 remote: error: unable to unlink old 'README.md' (Permission denied)
解决:
- Git clone远程仓库
git clone git@ip地址:/home/git_data/wechat.git
- 2017年2月27日Unicorn, US (148) and China (69), followed by the U.K. (10), India (9), Israel (5) and Germany (5).
Revisiting The Unicorn Club Get to know the newest crowd of billion dollar startups In 2013, when Ai ...
- 苹果审核不通过,程序/游戏不兼容IPV6网络
最近苹果升级的IOS10,所以那边网络环境变成IPV6,如果你的程序不兼容IPV6,苹果的程序会以这个不兼容的原因驳回审核. 那么如何让自己的程序兼容这个?方法其实C#本来已经提供给你的,而且很简单, ...
- 跟阿根一起学Java Web开发二:使用Ajax技术及XML与JSON实现输出
如今B/S结构的系统使用Ajax技术是再平常只是的了.今天我们就来探讨下在JSPGenSDF第四版中:怎样使用Ajax技术.怎样输出XML文件及JSON格式数据输出. 怎样搭建一个最基础的JSPGen ...