CodeFirst+MySql開發


CodeFirst+MySql開發簡單入門

記錄一下使用Mysql進行EF Codefirst方式開發的簡單過程。

0.准備工作

安裝MySql,mysql-connector-net,mysql-for-visualstudio,這部分網上有很多教程,https://blog.csdn.net/ZKH_101/article/details/52518384

1.新建項目,添加組件

新建一個控制台應用程序,名字為MysqlCodeFirst,Nuget安裝MySql.Data.Entity

安裝完成后項目會多出來以下幾個引用

添加新建項→ADO.NET實體對象模型→空CodeFirst模型,名字為CodeFirstDb,執行完這一步,會改變配置文件並添加一個CodeFirstDb.cs文件

①配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="CodeFirstDb" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=MysqlCodeFirst.CodeFirstDb;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

我們可以看到自動生成的connectionString是連接Ms的,為了連接Mysql我們把connctionStrings改成如下,注意providerName也要切換到Mysql:

 <connectionStrings>
    <add name="EntityDb" connectionString="Data Source=.;port=3306;Initial Catalog=CodeFirstDb;user id=root;password=123456;" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

② CodeFirstDb.cs文件修改如下

根據CodeFirst的約定:Id會被設置為主鍵。

更多約定詳見msdn(https://msdn.microsoft.com/zh-cn/data/jj679962)。

2.把MyEntity映射到MySql數據庫

1.Enable-Migrations  啟動遷移

執行后項目生成Migrations文件夾,在該文件夾有Configuration.cs文件,Configuration.cs文件是遷移的配置類,代碼如下seed生成時是一個空方法,我們在seed方法中初始化一條數據:

   internal sealed class Configuration : DbMigrationsConfiguration<MysqlCodeFirst.CodeFirstDb>
    {
        //構造函數中可以添加一些遷移前的配置
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }
        //在遷移完成后執行,初始化的數據
        protected override void Seed(MysqlCodeFirst.CodeFirstDb context)
        {
            context.Set<MyEntity>().AddOrUpdate(new MyEntity()
            {
                Id = 1,
                Name = "hello ef!"
            });
        }
    }

② Add-Migration FirstInit。(為本次遷移起名字為FirstInit)

此時在項目的Migration文件夾中會自動生成遷移記錄文件,文件名以“當前時間_本次遷移的名字”作為類名。

記錄文件有一個設計器和一個資源類和一個遷移具體操作的方法,設計器和資源類的內容都是自動維護的,不需要我們操作。

遷移文件類有Up()和Down()兩個方法,分別用於升級和降級。我們在修改數據庫架構的時候有時候會在這個類型修改配置,代碼如下

public partial class firstInit: DbMigration
    {
        /// <summary>
        /// 本次遷移執行的具體操作,即升級數據庫。
        /// </summary>
        public override void Up()
        {
            //創建架構為"dbo",表名為”MyEntities"的數據庫表。
            CreateTable(
                "dbo.MyEntities",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),//Id,int類型,不可為空,標識列(自動增長)。
                        Name = c.String(),//Name,string類型
                    })
                .PrimaryKey(t => t.Id);//設置主鍵為Id
            
        }
        /// <summary>
        /// 以后如果回滾數據庫,那么會執行此降級方法。
        /// </summary>
        public override void Down()
        {
            DropTable("dbo.MyEntities");//刪除架構為"dbo",表名為”MyEntities"的數據庫表。
        }
    }

③ Update-DataBase –script   生成Sql腳本 ,這一步可以不執行的,主要在查錯時使用

本例中生成的sql腳本如下:

create table `MyEntities` (`Id` int not null  auto_increment ,`Name` longtext,primary key ( `Id`) ) engine=InnoDb auto_increment=0
create table `__MigrationHistory` (`MigrationId` nvarchar(150)  not null ,`ContextKey` nvarchar(300)  not null ,`Model` longblob not null ,`ProductVersion` nvarchar(32)  not null ,primary key ( `MigrationId`) ) engine=InnoDb auto_increment=0
INSERT INTO `__MigrationHistory`(
`MigrationId`, 
`ContextKey`, 
`Model`, 
`ProductVersion`) VALUES (
'201809070820233_firstInit', 
'MysqlCodeFirst.Migrations.Configuration', 
0x1F8B0800000000000400CD57DB6EDB38107D5F60FF81E0736AE68262B781DC22759222D83A09AAB4EFB4347688A548551C05D6B7F5A19FB4BFB043EB2ED98E1B144561C0B0C89933670E6786F27FDFBE07EFD689664F903965CD949F4C8E390313D95899D594E7B87CF5377FF7F6CF3F82AB3859B32FB5DD99B7234FE3A6FC11313D17C2458F90483749549459679738896C22646CC5E9F1F11B7172228020386131167CCA0DAA04360FF438B326821473A9E73606EDAA75DA0937A8EC5626E05219C194CF0BF755CFC8EC5A650E39BBD04A128B10F49233698C4589C4F1FCB38310336B56614A0B523F142990DD526A0715F7F3D6FCD0348E4F7D1AA275ACA1A2DCA14D7E10F0E4ACD2450CDD5FA42E6F7423E5AE48612C7CD61BF5BC70E51267C360E7339D79C3A1B893DAE588F5378E9A4AA082F19F2336CB35E6194C0DE498497DC4EEF38556D13F503CD87FC14C4DAE75971F31A4BDDE022DDD6736850C8B4FB0AC58DFC49C89BE9F183A366E1D9F329F1B8367A79CDD5270B9D0D01C7F27F7106D061FC0402611E27B890899F11850A925F6C6F2DF7534AA376A1BCEE672FD11CC0A1F4950B9E6EC5AAD21AE572A069F8DA22E2327CC72E80709447B76E313A55E41A9886E45A03994CBC59693A52EA80ED755A1FAD994982160BF481438CE5A16657B4DDA0ADA46B721D676AF28DBB76E73B1A3CF83B94C5352AED3F7D50A0BCBA69FBD0A7FBC23921243446E4B63346C9B485407720583DDAEBE12E542FAB39BC5C91EB3C52E89EB4823A5875DD00A5FBBF8DFB5DBD60E1D62B4125E535609D5F2264168C874E6C1C8753377A596D996BE9A599D2766576FEEF32E3BA5EB5FAE8C110231E03E14488C141A4C88A1E6FBCA7568D2446FCA76509E41552ACFDF55A3DA294D3823699E54ECEB665E845FF5C4EF4F363F675A51C2ADC55C1AB50487E514E5AF277F0DAEBCDFE7FA11CEC5FAC03BE897DF04CA8BFAECAC1F5D14870F7F4DAF1A086BEC82FCBCD95ECF9E83A677B17776973538E5F1C212F7926877ECBF70B68F9B2210DDD7BCE0129C5AB510FEA5CF40E4ABAD05AD6D6ECCD2D65A537A5D46B5C9E028E6803226952E32544B19216D47E0DCE63EFE22754E2657C902E21B7397639AE38573902C74EF2E0BC4FEF89B0BACCF39B84BFD93FB1929104D4529C09D799F2B1D37BCAFC7A5B80BC2174C55DFC48ADE47086E553448B7D61C0854C977092918DF1D0F90A49AC0DC9D09E513BC841BBD8A7C84958C8A7AB4ED0679FE20FAB207974AAE3299B80AA3F5F77F5D84FFEFF2F67F675569BEED0C0000, 
'6.2.0-61023');

第一段創建表MyEntities。

第二段:創建表_MigrationHistory,是EF6框架用來維護模型的表。

  [MigrationId]:遍號,主鍵,存儲設計類中Id,其實就是本次遷移記錄的名稱。

  [ContextKey]:標記當前上下文的識別碼,主鍵,因為CodeFirst支持多個上下文實例,所以用這個字段來標記。

  [Model]:模型,當前模型的具體描述,加密了。

  [ProductVersion]:EF框架的版本號。

EF6框架通過這張表具體記錄每次遷移變化,也是通過這張表來檢查程序中的對象和數據庫中的關系是否一致。

④ Update-DataBase –verbose(或者-v)。更新數據庫並查看sql腳本

然后去看一下數據庫,可以看到codefirstdb數據庫已經自動生成了,初始化的數據也存入了數據庫中

這里采用了最簡單的方式實現使用mysql的codefirst開發方式,暫時記錄到這里,以后在項目中用到再做進一步記錄。

參考文獻:

1.https://www.cnblogs.com/kexxxfeng/p/5095812.html

2.https://www.cnblogs.com/summit7ca/p/5423637.html

3.http://www.cnblogs.com/gameman/p/3773240.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM