Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WPF 运行时迁移 EF Core 数据库

WPF 运行时迁移 EF Core 数据库

作者头像
林德熙
发布于 2022-08-04 10:17:37
发布于 2022-08-04 10:17:37
65500
代码可运行
举报
文章被收录于专栏:林德熙的博客林德熙的博客
运行总次数:0
代码可运行

在客户端开发,可以使用 .NET Core 3.0 开发 WPF 程序,可以使用 EF Core 连接数据库。客户端的数据库使用 SQLite 在不同的版本需要在客户端运行做数据库迁移升级数据库

在 WPF 使用 EF Core 可以安装下面的库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <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 属性,如创建资源类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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; }
    }

然后创建数据类,用于连接数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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 方法在里面写连接方法,此时就完成了数据定义,但是还没有创建数据库

使用命令行进行数据库迁移,数据库迁移就是创建数据库相关代码,在第一次进行迁移将会自动创建代码用于创建数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet ef migrations add 版本名 

上面代码的版本名可以随意命名,如我是这样写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet ef migrations add Lindexi 

执行上面代码可以看到在项目里面添加了 Migrations 文件夹,这个文件夹里面包含数据库的迁移代码

在主函数可以使用下面代码创建数据库,如果数据库已经创建了那么将什么都不做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            using (var kekairwuceeYernellijewhebere = new KekairwuceeYernellijewhebere())
            {
                kekairwuceeYernellijewhebere.Database.Migrate();
            }

如果只是一次性创建,之后不执行修改的,可以使用 EnsureCreated 函数创建,请看下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            using (var kekairwuceeYernellijewhebere = new KekairwuceeYernellijewhebere())
            {
                kekairwuceeYernellijewhebere.Database.EnsureCreated();
            }

注意使用 EnsureCreated 函数创建之后,将在下次调用 Database.Migrate 函数时提示下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Microsoft.Data.Sqlite.SqliteException:“SQLite Error 1: 'table "ResourceModel" already exists'.

如果软件更新了,需要修改 ResourceModel 的内容,添加一个属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   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; }
    }

那么在修改代码之后,再次执行迁移命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet ef migrations add 版本名 

此时建议创建迁移代码,在软件运行的时候执行 Migrate 函数将会自动升级数据库

如果数据库是需要升级的,那么请使用 Database.Migrate 函数创建数据库,之后可以在访问数据库之前调用这个函数让数据库如果没有更新就自动更新

每次调用 Migrate 都需要一定的时间,建议在另一个线程运行

如果在运行 SaveChanges 提示 no such table 那么可能是在调用 Migrate 等方法之前没有先调用 dotnet ef migrations 创建迁移类

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Entity Framework Core 总结
dotnet ef migrations add InitialCreate 创建描述表结构的代码文件
yiyun
2022/04/01
1.3K0
Entity Framework Core 总结
在UWP项目中使用Entity Framework (20210505)
代码链接:scirem/EntityFrameworkLovesUWP (github.com)
ZhangYang
2021/05/05
5990
在UWP项目中使用Entity Framework (20210505)
【ASP.NET Core 基础知识】--数据库连接--数据迁移和代码优先开发
数据迁移是指将数据从一个存储系统、数据格式、应用程序或硬件平台转移到另一个的过程。这个过程可以涉及数据的转换、清洗和验证,以确保数据的完整性和一致性。一般用于如下情况:
喵叔
2024/05/24
2830
asp dotnet core 简单开发P2P中央服务器
在做P2P的时候,如何让设备发现是整个开发里面最重要的部分。可以采用的方式有组播、扫描局域网、追踪服务器发现等方法。其中效率最高,发现效果最好的也就是使用中央服务器了。本文告诉大家如何使用 ASP.NET Core 写一个简单的 P2P 追踪服务器
林德熙
2022/08/04
6040
《ASP.ENT Core 与 RESTful API 开发实战》-- (第5章)-- 读书笔记(上)
EF Core 是微软推出的 ORM 框架,一种为了解决高级编程语言中的对象和关系型数据库之间映射关系的技术,它能够将程序中的对象自动持久化到关系型数据库中,并能够将数据库中的数据信息自动映射到编程语言中的对象
郑子铭
2021/01/13
1.2K0
《ASP.ENT Core 与 RESTful API 开发实战》-- (第5章)-- 读书笔记(上)
张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用
Entity Framework Core (EF Core) 是 .NET 平台流行的对象关系映射(ORM)框架。虽然 .NET 平台中 ORM 框架有很多,比如 Dapper、NHibernate、PetaPoco 等,并且 EF Core 的性能也不是最优的(这是由于 EF 的实体跟踪特性,将其禁用后可以大幅提升性能),但依然吸引到很多后端开发者的使用,原因如下:
张高兴
2022/05/09
2.6K0
张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
加载相关数据:https://docs.microsoft.com/zh-cn/ef/core/querying/related-data/
郑子铭
2020/12/30
1.2K0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
entity framework数据库映射(ORM)
Sql Server安装:EntityFramework Mysql安装:MySql.Data.Entity
sofu456
2022/05/06
9760
entity framework数据库映射(ORM)
.NET Core EFCore零基础快速入门简单使用
Entity Framework (EF) Core 是轻量化、可扩展和跨平台版的对象关系映射程序 (O/RM)数据访问技术,。 它将开发人员从编写大量 SQL 语句中解放出来。
跟着阿笨一起玩NET
2020/08/05
3K0
dotnet core 使用 ef 迁移常见问题
执行命令dotnet ef migrations add lindexi.github.io显示下面代码
林德熙
2020/03/22
1.3K0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记
Entity Framework Core:https://docs.microsoft.com/zh-cn/ef/core/
郑子铭
2020/12/28
8060
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记
Entity Framework Core 2.0 使用入门
一.前言 Entity Framework(后面简称EF)作为微软家的ORM,自然而然从.NET Framework延续到了.NET Core。以前我也嫌弃EF太重而不去使用它,但是EF Core(Entity Framework Core)已经做了很多性能优化,还有一些增加新特性,吸引了我去使用它。关于EF Core 2.0 的新特性请看:http://www.cnblogs.com/stulzq/p/7366044.html 二.控制台程序使用 EF Core(Code First) 1.新建一个.NE
晓晨
2018/06/22
1.2K0
使用identity+jwt保护你的webapi(一)——identity基础配置
用户模块几乎是每个系统必备的基础功能,如果每次开发一个新项目时都要做个用户模块,确实非常无聊。好在asp.net core给我们提供了Identity,使用起来也是比较方便,如果对用户这块需求不是非常个性化的话,identity是一个不错的选择。
xhznl
2021/10/18
2K0
使用identity+jwt保护你的webapi(一)——identity基础配置
Entity Framework Core 之数据库迁移
前言 最近打算用.NET Core写一份开源的简易CMS系统,来练练手 所以又去深入研究了一下Entity Framework Core  发现其实有些细节园子里还是很少讲到. 特意整理了几个细节. 正文 1.数据库迁移 先了解一下什么是"数据库迁移",它提供了一种方法,可以逐步将Code First的实体架构更改应用于数据库,以保持数据库与EF Core模型同步,同时保留数据库中的现有数据。 EF Core的数据迁移相对EF6来说改了不少也简化了一些.所以我们现在就来看看如何进行数据迁移 我们以官方代码来
GuZhenYin
2018/03/30
1.1K0
Entity Framework Core 之数据库迁移
asp.net core之EfCore
EF Core(Entity Framework Core)是一个轻量级、跨平台的对象关系映射(ORM)框架,用于在.NET应用程序中访问和操作数据库。它是Entity Framework的下一代版本,专为.NET Core应用程序而设计。 EF Core提供了一种简单、灵活和高效的方式来与各种数据库进行交互,它通过将数据库表映射为.NET对象,并提供了一组强大的查询语言和操作API,使开发人员能够以面向对象的方式进行数据库操作。 本文是一个简单的EF Core教程,演示了如何使用EF Core进行数据库操作。
饭勺oO
2023/10/18
1K0
asp.net core之EfCore
在.NET Core类库中使用EF Core迁移数据库到SQL Server
前言 如果大家刚使用EntityFramework Core作为ORM框架的话,想必都会遇到数据库迁移的一些问题。 起初我是在ASP.NET Core的Web项目中进行的,但后来发现放在此处并不是很合理,一些关于数据库的迁移,比如新增表,字段,修改字段类型等等,不应该和最上层的Web项目所关联,数据的迁移文件放到这里也感觉有点多余,有点乱乱的感觉,所以才想着单独出来由专门的项目进行管理会比较好,也比较清晰! 注意目标框架选择的是.NET Core 2.0而不是.NET Standard 2.0。 0、前期准
企鹅号小编
2018/01/25
1.8K0
C# 数据操作系列 - 5. EF Core 入门
上一章简单介绍了一下ORM框架,并手写了一个类似ORM的工具类。这一章将介绍一个在C#世界里大名鼎鼎的ORM框架——Entity Framework的Core版。
程序员小高
2020/05/14
2.8K0
从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratch 前三部分弄完,我们已经可以对内存数据进行CRUD的基本操作,并且可以在asp.net core 2中集成Nlog了。 下面继续: Entity Framework Core 2.0 Entity Framework 是ORM(Object-Relational-Mapping)。ORM是一种让你可以使用面向
solenovex
2018/03/01
2.3K0
从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
【ASP.NET Core 基础知识】--数据库连接--使用Entity Framework Core进行数据库访问
Entity Framework Core(简称EF Core)是微软推出的一个轻量级版的Entity Framework,它是一个开源的、跨平台(Windows、Linux和macOS)的对象关系映射(ORM)框架。EF Core 旨在提供快速的数据访问和强大的数据库操作功能,同时保持较低的资源占用。 EF Core 支持与多种数据库系统的集成,包括 SQL Server、SQLite、MySQL、PostgreSQL 和 Oracle 等。它提供了 Code First 开发方法,允许开发人员通过代码来定义模型、配置映射关系和创建数据库。此外,EF Core 还支持数据迁移,使得在开发过程中数据库模式的变更更加容易管理和部署。 EF Core 与传统的 Entity Framework (EF) 相比,具有以下特点:
喵叔
2024/05/24
8640
.NET Core 使用 EF 出错的解决方法
在.NET Core 项目钟(类库),使用Entity Framework,建立模型生成数据库时,失败
痴者工良
2019/08/08
2.8K0
推荐阅读
相关推荐
Entity Framework Core 总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验