開源的 .NET 數據庫遷移框架

23213c06b4e92d438824169c1a19f0b2.png

4124bfef16214933537ad2690491282f.gif

d2ef2df04e5325c8d98dddd6cb199379.png

你好,這里是 Dotnet 工具箱,定期分享 Dotnet 有趣,實用的工具和組件,希望對您有用!

簡介

FluentMigrator 是一個開源的數據庫遷移框架,可以幫助用戶在開發過程中保持數據庫的一致性。它提供了一個簡潔的 Fluent API,可以讓你使用 C# 寫出簡潔的遷移腳本。FluentMigrator 提供了一系列的 API 用來創建和管理數據庫遷移,并且支持多種不同的數據庫系統,包括 MySQL、PostgreSQL 和 SQL Server 等。

使用 FluentMigrator 可以輕松地管理數據庫遷移,這對于敏捷開發項目特別有用。比如,當開發團隊的成員對數據庫做出更改時,FluentMigrator 可以自動檢測并應用這些更改,從而確保數據庫保持一致性。

如何使用

下面是一個示例,展示了如何在 .NET 中使用 FluentMigrator。

首先,創建一個控制臺項目。

dotnet?new?console?--name?test

添加以下 Nuget 包, 這里我們使用了 SQLite 數據庫。

dotnet?add?package?FluentMigratordotnet?add?package?FluentMigrator.Runnerdotnet?add?package?FluentMigrator.Runner.SQLitedotnet?add?package?Microsoft.Data.Sqlite

使用下面的代碼創建一個遷移類,20220430_AddLogTable.cs, 這里我們使用了 Migration 特性指定了版本。

using?FluentMigrator;namespace?test
{[Migration(20220430121800)]public?class?AddLogTable?:?Migration{public?override?void?Up(){Create.Table("Log").WithColumn("Id").AsInt64().PrimaryKey().Identity().WithColumn("Text").AsString();}public?override?void?Down(){Delete.Table("Log");}}
}

這將會創建 Log 表和 ID , Text 列。

準備好遷移類后, 使用下面的代碼,運行我們的遷移。

using?System;
using?System.Linq;using?FluentMigrator.Runner;
using?FluentMigrator.Runner.Initialization;using?Microsoft.Extensions.DependencyInjection;namespace?test
{class?Program{static?void?Main(string[]?args){var?serviceProvider?=?CreateServices();?using?(var?scope?=?serviceProvider.CreateScope()){UpdateDatabase(scope.ServiceProvider);}}private?static?IServiceProvider?CreateServices(){return?new?ServiceCollection()?.AddFluentMigratorCore().ConfigureRunner(rb?=>?rb?.AddSQLite()?.WithGlobalConnectionString("Data?Source=test.db")?.ScanIn(typeof(AddLogTable).Assembly).For.Migrations())?.AddLogging(lb?=>?lb.AddFluentMigratorConsole())?.BuildServiceProvider(false);}private?static?void?UpdateDatabase(IServiceProvider?serviceProvider){?var?runner?=?serviceProvider.GetRequiredService<IMigrationRunner>();?runner.MigrateUp();}}
}

運行上面的代碼,程序會自動運行遷移,創建指定的 Log 表。

在進行多版本的更新后, 如何進行回滾呢,你可能已經注意到了, 上面的代碼中我們實現 Down 方法, 刪除了 Log 表。它表示,如果我們回滾到 Migration(20220430121800) 這個版本時,它會執行 Down 方法并刪除 Log 表。

FluentMigrator 的主要優點在于它的易用性和靈活性。它的語法簡潔明了,能夠讓開發人員快速編寫數據庫遷移腳本。此外,FluentMigrator 還支持在遷移過程中執行多種操作,包括創建表、添加字段、修改表結構等。

總之,FluentMigrator 是一款優秀的數據庫遷移工具,能夠為開發人員提供簡潔、靈活的方式來管理數據庫遷移。

項目地址

https://github.com/fluentmigrator/fluentmigrator

178369f10b7a374e6c7eca33b62d0cc5.jpeg

Dotnet 工具箱

掃碼關注我們

a6443606942918f09634d4700a4b000b.png

分享

c17cc55532da328b3664d4a74a573df2.png

點收藏

71d542bb51833dcb7f477b8b787616dd.png

點點贊

e8dd69a48b61985be9263157a4d9c852.png

點在看

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280325.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在deepin上安裝YouCompleteMe

詳細安裝步驟在github上有&#xff0c;https://github.com/Valloric/YouCompleteMe&#xff0c;我這里是自己總結的簡化版安裝步驟。 步驟1.安裝Vundle 首先&#xff0c;clone到本地 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim把以下內容…

2015年IT領域里Docker和其它顛覆性的趨勢

本文講的是2015年IT領域里Docker和其它顛覆性的趨勢&#xff0c;【編者的話】文中作者介紹了2015年IT領域的一些顛覆性的趨勢&#xff0c;比如Docker將如何革新PaaS、IaaS等&#xff0c;Docker將如何顛覆虛擬化、私有云、配置管理。 2014年真是令人興奮的一年&#xff0c;這一年…

進化:從孤膽極客到高效團隊_極客狂:為什么這么多的網站無法使用打印樣式表?...

進化:從孤膽極客到高效團隊It never ceases to amaze me that people have to look for a link or a button that says “Print” on a web page, especially considering there’s a miracle technology that makes that step unnecessary. Sadly almost nobody uses it, even…

Iterator 和 for...of 循環

Iterator 和 for...of 循環 Iterator&#xff08;遍歷器&#xff09;意義 為Array、Object、Map、Set四種數據集合&#xff0c;提供統一的接口機制來處理所有不同的數據結構 。 任何數據結構&#xff0c;只要部署 Iterator 接口&#xff0c;就可以完成遍歷操作&#xff08;即依…

python簡單開發接口

1、首先需要安裝flask這個模塊&#xff1a;pip install flask。flask是個輕量級的接口開發框架2、開發接口有什么作用  1、mock接口&#xff0c;模擬一些接口&#xff0c;在別的接口沒有開發好的時候&#xff0c;需要用mock去模擬一些接口。  2、知道接口是怎么開發的&…

九哥聊Kestrel網絡編程第二章:開發一個Fiddler

推薦序之前在.NET 性能優化群內交流時&#xff0c;我們發現很多朋友對于高性能網絡框架有需求&#xff0c;需要創建自己的消息服務器、游戲服務器或者物聯網網關。但是大多數小伙伴只知道 DotNetty&#xff0c;雖然 DotNetty 是一個非常優秀的網絡框架&#xff0c;廣泛應用于各…

apple tv 開發_如何跨多臺Apple TV同步Apple TV的主屏幕

apple tv 開發If you have more than one Apple TV in your household, you probably know how annoying it is when you have to install Apple TV apps multiple times on each device. However, with the release of tvOS 11, that’s no longer the case. 如果您的家庭中有…

這些故事說的都是你——譯者帶你讀《硅谷革命》

作者 | 薛命燈 作為《硅谷革命》的譯者之一&#xff0c;同時也是一個擁有十余年軟件開發和架構經驗的工程師&#xff0c;當時我在決定是否接受重譯這本書的時候&#xff0c;幾乎是不假思索地答應了郭蕾&#xff08;本書重啟版發起人之一&#xff09;的提議&#xff0c;只因他的…

runc容器逃逸漏洞最強后續:應對之策匯總與熱點疑問解答

美國時間2019年2月11日晚&#xff0c;runc通過oss-security郵件列表披露了runc容器逃逸漏洞CVE-2019-5736的詳情。runc是Docker、CRI-O、Containerd、Kubernetes等底層的容器運行時&#xff0c;此次安全漏洞無可避免地會影響大多數Docker與Kubernetes用戶&#xff0c;也因此為整…

OOD之問題空間到解空間—附FP的建模

通常會被問到&#xff0c;什么事OOD&#xff0c;然后大部分人期待的答案比較死板&#xff0c;繼承、封裝、多態&#xff01;懂這個的人多的去了&#xff0c;有什么好問&#xff1f;回答出來的人是否拿著Java又去做一些面向過程的勾當&#xff1f; 計算機革命起源于機器&#xf…

com surrogate_什么是“ COM Surrogate”(dllhost.exe),為什么它在我的PC上運行?

com surrogateIf you poke around in your Task Manager, there’s a good chance you’ll see one or more “COM Surrogate” processes running on a Windows PC. These processes have the file name “dllhost.exe”, and are part of the Windows operating system. You’…

云計算時代,互聯網金融背后的想象空間

本文講的是云計算時代&#xff0c;互聯網金融背后的想象空間&#xff0c;【IT168評論】阿里巴巴在紐交所的開市鐘史無前例的由八位合作伙伴敲響&#xff0c;可見阿里對互聯網時代構筑起生態系統的堅持。這其中&#xff0c;由余額寶所敲開的互聯網金融熱潮的熱度持續不減&#x…

JavaScript數據結構與算法——集合

1.集合數據結構 集合是一組無序且唯一&#xff08;不能重復&#xff09;的項組成的。這個數據結構使用了和有限集合相同的數學概念。 2.創建集合 function Set() {// 這里使用對象而不是數組來表示集合 // js對象中不允許一個鍵值指向兩個不同屬性&#xff0c;也保證了集合中的…

php用兩個棧來實現隊列

php用兩個棧來實現隊列 一、總結 我主要的問題是不知道的是題目描述&#xff0c;題目和貴的代碼之間的關系&#xff0c;以及返回值 思路&#xff1a;A棧做入隊操作&#xff0c;B棧做出隊操作&#xff0c;入隊的時候元素直接入A&#xff0c;出隊的時候判斷B棧是否為空&#xff0…

facebook 邀請好友_如何查看緊急情況下您的Facebook朋友是否安全

facebook 邀請好友Facebook’s Safety Check feature lets you check in during an emergency to confirm you’re safe. If you have friends or family in an area that you haven’t heard from, though, you may want to ask them directly. Here’s how to ask someone to…

【您有一封來自阿里云的邀請函】阿里云成都客戶服務中心20+職位虛席以待,來吧,成就最好的自己!...

如果你不想辜負這個科技的時代&#xff0c;相信它會因你而不同。如果你不想僅做年度大戲的觀眾&#xff0c;相信自己會成為主角。如果你不想淹沒在枯燥與茍且中&#xff0c;相信工作有詩和遠方。那么&#xff0c;不要猶豫&#xff0c;加入我們&#xff01;在這&#xff0c;你已…

A - A Secret -擴展KMP

題目大意&#xff1a;給你兩個字符串A,B&#xff0c;現在要你求B串的后綴在A串中出現的次數和后綴長度的乘積和為多少。題解&#xff1a;擴展KMP模板題&#xff0c;將A和B串都逆序以后就變成了求前綴的問題了&#xff0c;擴展KMP求處從i位置開始的最長公共前綴存于數組。最后通…

.NET 代碼優化 聊聊邏輯圈復雜度

本文屬于 dotnet 代碼優化系列博客。相信大家都對圈復雜度這個概念很是熟悉&#xff0c;本文來和大家聊聊邏輯的圈復雜度。代碼優化里面&#xff0c;一個關注的重點在于代碼的邏輯復雜度。一段代碼的邏輯復雜度越高&#xff0c;那么維護起來的難度也就越大。衡量代碼的邏輯復雜…

GO語言基礎條件、跳轉、Array和Slice

1. 判斷語句if 1. 條件表達式沒有括號&#xff08;這點其他語言轉過來的需要注意&#xff09; 2. 支持一個初始化表達式&#xff08;可以是并行方式&#xff0c;即&#xff1a;a, b, c : 1, 2, 3) 3. 左大括號必須和條件語句或 else 在同一行 4. 支持單行模式 5. 初始化語句中的…

干式真空泵原理_如何安裝干式墻錨在墻壁上懸掛重物

干式真空泵原理If you ever plan to mount something to the wall that’s even remotely heavy, you’ll need to use drywall anchors if a stud isn’t available. Here are the different types of drywall anchors, and how to use each one. 如果您打算將甚至更重的東西安…