• 博客的数据库从sqlite迁移到mysql


    背景

    (这是导入的之前个人博客上的文章)
    之前的服务器挂了,换了一个windows的暂时使用。
    配置比较低,也是嫌麻烦,不打算直接在虚拟机上安装mysql,而是用新账号申请了一个1元试用1个月的mysql数据库。

    不过区域没选对,不能和虚拟机直接访问,只能通过公网ip,不过关系不大,也能用,又不是跑高端业务~

    数据库打算从本地的sqlite换成mysql(话说blog文字都是存在字段里,是否mongodb这种的会比较好呢。。。)

    搜索

    在网上搜了一下如何迁移,SO上这个问题migrating my SQLite database to mysql提供了脚本转换sql的方法,不过试了一下,不是很好用。
    而且博客里的文字中,有一些特殊字符也会被替换。

    不过原始问题中这个回答倒是启发了我,直接通过.net的ORM库进行转换。

    实践

    首先创建mysql数据库,这里我利用了原始项目的migration创建(其实似乎可以不要的)。

    然后新建一个工程用以迁移数据库,具体操作就是新建两个DbContext代表原始数据库和目标数据库,然后把每个DbSet遍历拷贝即可,逻辑很简单,只要配好使用的数据库provider和ConnectionString。

    		public static async Task MirgrateAsync()
            {
                using (var src = new AppDbContextSrc())
                {
                    using (var dst = new AppDbContextDst())
                    {
                        //author
                        Console.WriteLine("Reading Authors from src...");
                        var authors = await src.Authors.ToListAsync();
                        Console.WriteLine("Writing Authors to dst...");
                        await dst.Authors.AddRangeAsync(authors);
    
                        //blogposts
                        Console.WriteLine("Reading BlogPosts from src...");
                        var posts = await src.BlogPosts.ToListAsync();
                        Console.WriteLine("Writing BlogPosts to dst...");
                        await dst.BlogPosts.AddRangeAsync(posts);
                        Console.WriteLine("Being Commit");
                        await dst.SaveChangesAsync();
                        Console.WriteLine("End Commit");
                        Console.WriteLine("====================================================");
    
                        //customfields
                        Console.WriteLine("Reading CustomFields from src...");
                        var cust = await src.CustomFields.ToListAsync();
                        Console.WriteLine("Writing CustomFields to dst...");
                        await dst.CustomFields.AddRangeAsync(cust);
    
                        //htmowidgets
                        Console.WriteLine("Reading HtmlWidgets from src...");
                        var widgets = await src.HtmlWidgets.ToListAsync();
                        Console.WriteLine("Writing HtmlWidgets to dst...");
                        await dst.HtmlWidgets.AddRangeAsync(widgets);
    
                        //newsletters
                        Console.WriteLine("Reading Newsletters from src...");
                        var nl = await src.Newsletters.ToListAsync();
                        Console.WriteLine("Writing Newsletters to dst...");
                        await dst.Newsletters.AddRangeAsync(nl);
    
                        //users
                        Console.WriteLine("Reading Users from src...");
                        var users = await src.Users.ToListAsync();
                        Console.WriteLine("Writing Users to dst...");
                        await dst.Users.AddRangeAsync(users);
    
                        Console.WriteLine("Being Commit");
                        await dst.SaveChangesAsync();
                        Console.WriteLine("End Commit");
                        Console.WriteLine("====================================================");
                    }
                }
            }
    

    一开始拷贝完成忘了调用SaveChangesAsync结果没有保存。。。

  • 相关阅读:
    UVALive 7141 BombX
    CodeForces 722D Generating Sets
    CodeForces 722C Destroying Array
    CodeForces 721D Maxim and Array
    CodeForces 721C Journey
    CodeForces 415D Mashmokh and ACM
    CodeForces 718C Sasha and Array
    CodeForces 635C XOR Equation
    CodeForces 631D Messenger
    田忌赛马问题
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608732.html
Copyright © 2020-2023  润新知