• C# VS2022 EF6 + Mysql8.0.31 CodeFirsts使用配置


    环境

    安装Mysql8.0.31

    下载Mysql连接器Net版本

    地址:
    https://dev.mysql.com/downloads/connector/net/
    下载后 一直下一步安装即可

    安装VS2022

    创建工程

    • 项目名称
      • 随意,我这取名 EF6ForMysql
    • 项目版本
      • .netframework 4.8
      • 其实core更简单,但是显示情况要求必须这样,所以才费劲搞了一下ef6

    效果如下
    在这里插入图片描述

    添加Nuget包

    不赘述了,直接上package文件

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="EntityFramework" version="6.4.4" targetFramework="net48" />
      <package id="Google.Protobuf" version="3.19.4" targetFramework="net48" />
      <package id="K4os.Compression.LZ4" version="1.2.6" targetFramework="net48" />
      <package id="K4os.Compression.LZ4.Streams" version="1.2.6" targetFramework="net48" />
      <package id="K4os.Hash.xxHash" version="1.0.6" targetFramework="net48" />
      <package id="MySql.Data" version="8.0.31" targetFramework="net48" />
      <package id="MySql.Data.EntityFramework" version="8.0.31" targetFramework="net48" />
      <package id="Portable.BouncyCastle" version="1.9.0" targetFramework="net48" />
      <package id="System.Buffers" version="4.5.1" targetFramework="net48" />
      <package id="System.Memory" version="4.5.4" targetFramework="net48" />
      <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
      <package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net48" />
    </packages>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    修改配置文件如下

    <?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>
      <connectionStrings>
       <!--这里需要注意,DataSource 不要用 . ,因为“.”是sqlserver使用的-->
        <add name="default" connectionString="Data Source=localhost;Initial Catalog=你的库名;user id=你的数据库账户;password=你的数据库登录密码;" providerName="MySql.Data.MySqlClient" />
      </connectionStrings>
      <entityFramework>
        <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.EntityFramework, Version=8.0.31.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
          </provider>
        </providers>
      </entityFramework>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    ==注意连接字符串,服务地址可以用localhost,但是不能用 “.” ==

    准备工作,创建一个Dbcontext类,代码如下

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Configuration;
    using System.Data.Entity;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace EF6ForMysql
    {
        public class MyDbContext : DbContext
        { 
            public MyDbContext() : base("default")
            {
            }
        } 
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    打开程序包控制台输入命令

    第一步

    Enable-Migrations
    
    • 1

    在这里插入图片描述

    第二步

    找到下面这个文件,修改sql生成器
    在这里插入图片描述
    代码做如下修改

    namespace EF6ForMysql.Migrations
    {
        using MySql.Data.EntityFramework;
        using System;
        using System.Data.Entity;
        using System.Data.Entity.Migrations;
        using System.Linq;
    
        internal sealed class Configuration : DbMigrationsConfiguration<EF6ForMysql.MyDbContext>
        {
            public Configuration()
            {
                AutomaticMigrationsEnabled = false;
                //添加这行代码
                SetSqlGenerator("MySql.Data.MySqlClient", new MySqlMigrationSqlGenerator());//设置Sql生成器为Mysql的
            }
    
            protected override void Seed(EF6ForMysql.MyDbContext context)
            {
                //  This method will be called after migrating to the latest version.
    
                //  You can use the DbSet<T>.AddOrUpdate() helper extension method
                //  to avoid creating duplicate seed data.
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    注意是添加 SetSqlGenerator("MySql.Data.MySqlClient", new MySqlMigrationSqlGenerator());//设置Sql生成器为Mysql的代码

    第三步

    在程序包控制台输入如下代码

    Add-Migration Init
    
    • 1

    效果如下
    在这里插入图片描述

    第四步

    迁移数据库,输入如下命令

    Update-Database
    
    • 1

    在这里插入图片描述

    到此codefirst的配置完成

    简要介绍一下如何添加一个表

    思路

    添加一个实体到dbcontext中,通过重复执行如上的 第三步第四步,实现添加一个表到数据库

    添加User实体类

     public class User
        {
            [Key]
            public string Id { get; set; }
    
            [MaxLength(100)]
            public string Name { get; set; }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    修改dbcontext

    代码如下

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Configuration;
    using System.Data.Entity;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace EF6ForMysql
    {
        public class MyDbContext : DbContext
        {
           // 添加一个DbSet,这个就会增加一个表
            public DbSet<User> Users { get; set; }
            public MyDbContext() : base("default")
            {
            }
        } 
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    到此结束,关于EF的使用和一下特性,参考msdn的学习文档。

  • 相关阅读:
    webpack 的 Loader 和 Plugin 的区别,常见的 loader 和 plugin 有哪些?
    你真的知道什么是正弦和余弦吗?使用 Python 和 Turtle 可视化数学
    每日两题 103二叉树的锯齿形层序遍历(数组) 513找树左下角的值(队列)
    前缀和与查分(一维前缀和,二维前缀和(子矩阵的和)一维差分、二维差分(差分矩阵))
    【微服务】Hystrix的概念、作用以及使用方法
    从 Oracle 到 MySQL 数据库的迁移之旅
    这是一个很废的人的比赛经历
    662. 二叉树最大宽度(难度:中等)
    【AGC】集成华为AGC崩溃服务实用教程
    ArcGIS:如何在地理数据库中创建关系类
  • 原文地址:https://blog.csdn.net/iml6yu/article/details/127827009