日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FreeSql (三十四)CodeFirst 迁移说明

發布時間:2023/12/18 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeSql (三十四)CodeFirst 迁移说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FreeSql 支持 CodeFirst 遷移結構至數據庫,這應該是(O/RM)必須標配的一個功能。

與其他(O/RM)不同FreeSql支持更多的數據庫特性,而不只是支持基礎的數據類型,這既是優點也是缺點,優點是充分利用數據庫特性輔助開發,缺點是切換數據庫變得困難。不同程序員的理念可能不太一致,作為功能庫FreeSql支持到了極致,至于是否使用是項目組技術衡量的另一個問題。

盡管多種數據庫適配邏輯非常復雜,FreeSql始終秉承優化程序開發習慣的原則盡量去實現,中間碰到了一些非技術無法攻克的難題,比如數據庫的自定義類型,和實體類本身就是一種沖突,為了減少使用成本,諸如此類的數據庫功能沒有得到支持。

IFreeSql fsql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10").UseAutoSyncStructure(true) //自動同步實體結構【開發環境必備】.Build();
  • 《實體特性說明》

  • 《FluentApi,享受純凈實體類》

  • 《導入數據庫特性,懶人專利》

  • 《Aop自定義特性,與其他 ORM 共用特性》

  • 《類型映射,一覽便知》

  • 《導航關系配置》

遷移結構

實體&表對比添加改名刪除
X
實體屬性&字段對比添加修改可空修改自增修改類型改名刪除備注
X

為了保證安全,不提供刪除字段。

警告:如果實體類屬性,與數據庫表字段不完整映射的時候,未映射的字段有可能發生丟失。

原因:某些遷移對比操作是:創建臨時表、導入舊表數據、刪除舊表。

FreeSql提供兩種CodeFirst移遷方法,自動和手動。

自動同步實體結構【開發環境必備】

自動同步實體結構到數據庫,程序運行中檢查實體表是否存在,然后遷移執行創建或修改。

fsql.CodeFirst.IsAutoSyncDataStructure = true;

此功能默認為開啟狀態,發布正式環境后,請修改此設置。

雖然【自動同步實體結構】功能開發非常好用,但是有個壞處,就是數據庫后面會很亂,沒用的字段可能一大堆,應盡量控制實體或屬性命名的修改。

禁用遷移

當【實體類】對應的是數據庫【視圖】或者其他時,可通過 [Table(DisableSyncStructure = true)] 禁用指定的實體遷移操作。

[Table(DisableSyncStructure = true)] class ModelDisableSyncStructure {[Column(IsPrimary = false)]public int pkid { get; set; } }

備注

FreeSql CodeFirst 支持將 c# 代碼內的注釋,遷移至數據庫的備注。先決條件:

1、實體類所在程序集,需要開啟 xml 文檔功能;

2、xml 文件必須與程序集同目錄,且文件名:xxx.dll -> xxx.xml;

手工同步實體結構

提供接口方法實現對比實體,與數據庫中的變化部分,返回SQL語句。

var t1 = mysql.CodeFirst.GetComparisonDDLStatements<Topic>();class Topic {[Column(IsIdentity = true, IsPrimary = true)]public int Id { get; set; }public int Clicks { get; set; }public string Title { get; set; }public DateTime CreateTime { get; set; }public ushort fusho { get; set; } } CREATE TABLE IF NOT EXISTS `cccddd`.`Topic` ( `Id` INT(11) NOT NULL AUTO_INCREMENT, `Clicks` INT(11) NOT NULL, `Title` VARCHAR(255), `CreateTime` DATETIME NOT NULL, `fusho` SMALLINT(5) UNSIGNED NOT NULL, PRIMARY KEY (`Id`) ) Engine=InnoDB CHARACTER SET utf8;

提供接口方法實現同步結構

var t2 = fsql.CodeFirst.SyncStructure<Topic>(); //同步實體類型到數據庫

實體特性

指定實體的表名,指定 Name 后,實體類名變化不影響數據庫對應的表。FreeSql盡量支持了對多數據庫或schema支持,不防試試指定表名為:其他數據庫.表名,不同數據庫的指定方式有差異,這一點以后深入解答。

[Table(Name = "db2.tb_topic111")] class Topic {//... }

無指定實體的表名,修改為實體類名。指定數據庫舊的表名,修改實體命名時,同時設置此參數為修改之前的值,CodeFirst才可以正確修改數據庫表;否則將視為【創建新表】。

[Table(OldName = "Topic")] class Topic2 {//... } ALTER TABLE `cccddd`.`Topic` RENAME TO `cccddd`.`Topic2`;

修改字段類型,把 Title 類型改為 varchar(128)。

[Column(DbType = "varchar(128)")] public string Title { get; set; } ALTER TABLE `cccddd`.`Topic2` MODIFY `Title` VARCHAR(128);

指定屬性的字段名,這樣指定后,修改實體的屬性名不影響數據庫對應的列。

[Column(Name = "titl2")] public string Title { get; set; }

無指定屬性的字段名,修改為屬性名,指定數據庫舊的列名,修改實體屬性命名時,同時設置此參數為修改之前的值,CodeFirst才可以正確修改數據庫字段;否則將視為【新增字段】。

[Column(OldName = "Title2")] public string Title { get; set; } ALTER TABLE `cccddd`.`Topic2` CHANGE COLUMN `Title2` `Title` VARCHAR(255);

系列文章導航

  • (一)入門

  • (二)自動遷移實體

  • (三)實體特性

  • (四)實體特性 Fluent Api

  • (五)插入數據

  • (六)批量插入數據

  • (七)插入數據時忽略列

  • (八)插入數據時指定列

  • (九)刪除數據

  • (十)更新數據

  • (十一)更新數據 Where

  • (十二)更新數據時指定列

  • (十三)更新數據時忽略列

  • (十四)批量更新數據

  • (十五)查詢數據

  • (十六)分頁查詢

  • (十七)聯表查詢

  • (十八)導航屬性

  • (十九)多表查詢

  • (二十)多表查詢 WhereCascade

  • (二十一)查詢返回數據

  • (二十二)Dto 映射查詢

  • (二十三)分組、聚合

  • (二十四)Linq To Sql 語法使用介紹

  • (二十五)延時加載

  • (二十六)貪婪加載 Include、IncludeMany、Dto、ToList

  • (二十七)將已寫好的 SQL 語句,與實體類映射進行二次查詢

  • (二十八)事務

  • (二十九)Lambda 表達式

  • (三十)讀寫分離

  • (三十一)分區分表

  • (三十二)Aop

  • (三十三)CodeFirst 類型映射

  • (三十四)CodeFirst 遷移說明

  • (三十五)CodeFirst 自定義特性

轉載于:https://www.cnblogs.com/FreeSql/p/11531550.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的FreeSql (三十四)CodeFirst 迁移说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。