博客 mysql Sqlite_博客的数据库从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结果没有保存。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值