专栏首页林德熙的博客WPF 运行时迁移 EF Core 数据库

WPF 运行时迁移 EF Core 数据库

在客户端开发,可以使用 .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 都需要一定的时间,建议在另一个线程运行


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • win10 uwp json

    本文讲的是关于在uwp使用json的简单使用,json应用很多,因为我只是写简单使用,说的东西可能不对或者不符合每个人的预期。如果觉得我有讲的不对的,就多多包含...

    林德熙
  • win10 uwp 萤火虫效果 安装 win2d创建界面后台的方法核心代码

    本文在Nukepayload2指导下,使用他的思想用C#写出来。 本文告诉大家,如何使用 win2d 做出萤火虫效果。

    林德熙
  • win10 uwp 如何让 Page 继承泛型类

    本文告诉大家一个方法让 Page 继承一个泛型类。 我使用自己的框架的时候,发现每个页面都需要添加一些相同的代码,所以就想把他写出来,作为一个基础的 Page ...

    林德熙
  • FreeSql 新的八大骚功能

    FreeSql 目前版本号 0.5.5,预计明年元旦发布 1.0.0,切莫小看了版本号,目前单元测试方法1350+,并且每个方法内的涵盖面又比较广(不信的话见下...

    梁规晓
  • 使用ORM框架,必须迁就数据库的设计吗?

    我在CSDN发表了一个帖子,发布一款强大的ORM工具--PDF.NET集成开发工具 ,有个朋友caozhy提出了非常尖锐的问题,我对他的问题做了回答,现在觉得他...

    用户1177503
  • Entity Framework DataAnnotations

    DataAnnotation 特性由.NET 3.5中引进,给.NET中的类提供了一种添加验证的方式。但是在EF中它又可以对映射关系进行控制,相比较Fluent...

    aehyok
  • 向服务器发送josn字符串,服务器端解析

    跟着阿笨一起玩NET
  • 麻雀虽小,五脏俱全。基于Asp.net core + Sqlite 5分钟快速上手一个小项目

    方法1:在控制台输入 : dotenet add (项目名) package (包名)

    WeiMLing
  • win10 uwp json

    本文讲的是关于在uwp使用json的简单使用,json应用很多,因为我只是写简单使用,说的东西可能不对或者不符合每个人的预期。如果觉得我有讲的不对的,就多多包含...

    林德熙
  • 以读取博客园随笔备份为例 将xml 序列化成json,再序列化成对象

    资源下载:http://files.cnblogs.com/codealone/ConsoleApplication2.zip

    跟着阿笨一起玩NET

扫码关注云+社区

领取腾讯云代金券