<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Ef Core花里胡哨系列(7) 使用Ef Core也能維護(hù)表架構(gòu)?

      Ef Core花里胡哨系列(7) 使用Ef Core也能維護(hù)表架構(gòu)?

      我們這里指的并不是查詢,而是利用Ef的遷移原理,生成可用的其它表架構(gòu)操作的Sql

      例如你想在Ef Core里建表,并且可能程序里有多個(gè)provider,那么寫Sql將是一件痛苦的事情,我們就是利用Ef Core遷移時(shí)的操作,來(lái)為我們所用。

      如果看過(guò)此系列中屏蔽外鍵的那一篇博客,我們的主角就暗藏在里面,它就是各種Operation

      Operation

      Ef Core中所有的遷移的工作單元均由Operation組成,例如CreateTableOperationAlterColumnOperation等等,我們要做的就是將我們的操作組裝為對(duì)應(yīng)的Operation來(lái)模擬遷移的操作,讓Ef Core去生成Sql,那我們?cè)谝欢ǔ潭壬暇捅苊饬?code>Sql的強(qiáng)耦合,生成Sql將有Ef Core的提供程序來(lái)提供支持。

      當(dāng)然我們之前提到過(guò),不同的提供程序可能有些實(shí)現(xiàn)是沒(méi)有的,例如微軟官方就不提供AlterColumnOperation,直接采用的暴力的DropAdd,我們只需重寫IMigrationsSqlGenerator中對(duì)應(yīng)的實(shí)現(xiàn)即可。

      使用Operation有兩種方法實(shí)現(xiàn):

      • 直接拼接Operation
      • 類似于遷移文件的寫法

      直接拼接Operation

      直接拼接Operation需要我們創(chuàng)建對(duì)應(yīng)的Operation并且填充里面的主要信息,生成Sql時(shí),需要拿到DbContext內(nèi)部的IMigrationsSqlGenerator作為服務(wù),用于生成Sql

      var service = CreateDbContext<DataDbContext>().GetService<IMigrationsSqlGenerator>();
      
      var creator = new CreateTableOperation()
      {
          Name = "test",
      };
      creator.Columns.Add(new AddColumnOperation()
      {
          Name = "Id",
          ClrType = typeof(int),
          IsNullable = false
      });
      
      var operations = new List<MigrationOperation> {
          creator
      };
      
      var cmd = service.Generate(operations);
      
      foreach (var item in cmd.Select(x => x.CommandText))
      {
          TestOutputHelper.WriteLine(item);
      }
      

      類似于遷移文件的寫法

      類似于遷移文件的寫法實(shí)現(xiàn)時(shí),和遷移文件中展現(xiàn)的部分基本一樣,生成Sql時(shí),需要構(gòu)建一個(gè)MigrationBuilder并且提供你要使用的Ef Core提供程序,項(xiàng)目里需要引用該提供程序。隨后即可生成對(duì)應(yīng)的Sql

      MigrationBuilder t = new MigrationBuilder("Microsoft.EntityFrameworkCore.SqlServer");
      
      t.CreateTable(
              name: "flow_draft",
              columns: table => new
              {
                  ID = table.Column<string>(type: "varchar(36)", maxLength: 36, nullable: false),
                  FlowId = table.Column<string>(type: "varchar(50)", maxLength: 50, nullable: false, comment: "流程Id"),
                  UserId = table.Column<string>(type: "varchar(255)", nullable: false, comment: "草稿提交人"),
                  FormDataId = table.Column<string>(type: "varchar(36)", maxLength: 36, nullable: false, comment: "數(shù)據(jù)Id"),
                  Content = table.Column<string>(type: "longtext", nullable: false, comment: "表單冗余數(shù)據(jù)")
              },
              constraints: table =>
              {
                  table.PrimaryKey("PK_flow_draft", x => x.ID);
              },
              comment: "流程草稿記錄")
          .Annotation("MySQL:Charset", "utf8mb4");
      
      cmd = service.Generate(t.Operations);
      
      foreach (var item in cmd.Select(x => x.CommandText))
      {
          TestOutputHelper.WriteLine(item);
      }
      
      posted @ 2024-01-03 09:01  胖紙不爭(zhēng)  閱讀(857)  評(píng)論(2)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲精品成人福利网站| 国产精品免费中文字幕| 国产色无码专区在线观看| 男女性高爱潮免费网站| 国产视频有码字幕一区二区| 国产97人人超碰CAO蜜芽PROM| 国内熟妇人妻色在线视频| 在线亚洲妇色中文色综合| 噜噜噜噜私人影院| 亚洲中文字幕无码日韩精品| 日韩人妻无码一区二区三区99| 日韩欧美亚洲综合久久| 久久妇女高潮喷水多| 色一情一乱一伦麻豆| 无码日韩人妻精品久久蜜桃| 国产一区二区丰满熟女人妻 | 国产视频深夜在线观看| 骚虎视频在线观看| 国产精品制服丝袜无码| 国产精品午夜福利合集| 一 级做人爱全视频在线看 | 国内精品自产拍在线播放| 成人无码精品1区2区3区免费看| 欧美成人va免费大片视频| 四虎在线中文字幕一区| 日韩精品射精管理在线观看| 无码视频一区二区三区| 蜜芽亚洲AV无码精品国产午夜 | 国产精品无遮挡猛进猛出| 樱桃视频影院在线播放 | 极品少妇的粉嫩小泬看片| 蒙阴县| 亚洲精品国产av成人网| 潮喷失禁大喷水无码| 亚洲中文字幕无码专区| 日韩乱码人妻无码系列中文字幕| 国产精品亚洲二区亚瑟| 上司的丰满人妻中文字幕| 亚洲啪啪精品一区二区的| 国产99视频精品免费视频36| 疯狂做受xxxx高潮视频免费|