C# .NET 开发 使用 EF<EntityFramework> 连接 MySQL EF Code First Migrations 乱码

2 篇文章 0 订阅
1 篇文章 0 订阅

前言:以前一直用ASP.NET 写SQL 语言连接,今天看到了EF,使用该框架做一下代码重构,主要介绍与解决遇到的坑,其中参考的博客和官方论坛有点多,整理了一下算是自己的原创吧!,第五条 有不对的地方,留言指出,万谢。

开发环境:win10 1903+MySQL 5.7+.Net 4.5

问题1:基本部署的顺序?

答:一| 添加相关的dll文件,不管是使用NuGet查询 MySQ安装相关,或者 使用命令(这个命令会安装10.X版本 然后就会失败,问题为解决哦)

install-package MySql.Data.Entity

效果都是一样的,需要注意的是版本,.NET 4.5下建议使用9.x 别问为什么,我由高版本到低版本一个个试的就这个成功。若.NET 与MySQL版本最新,建议使用新版。

二| 添加 ADO.NET 实体数据模型,这东西本质上就是一个基础DbContext 的类,自己写也一样,结构会自己创建,需要选的是空的Code First 模型,当然也可以选其他的。

三|  配置 config  别问这文件在哪里?VS 看到你上面的操作,会帮你生成,需要注意的是配置MySQL 连接信息  放出来给你看看,如果你按顺序来,会自动添加的。

 <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, 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.Entity.EF6"></provider>
    </providers>
  </entityFramework>

  然后按需要将连接节点加入

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

四| 后续命令  按顺序一个个来

开启 迁移   

enable-migrations

如果你失败了,看一下这个东西,在不在你的config里(注意 版本 与publickey  这个是个使用的版本对应的) 

  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

初始化 迁移类  这个命令是第一次使用的时候执行,会生成一个类,用于创建数据库,与表结构,如果你Mode定义的没问题

 Add-Migration InitialCreate

使用代码迁移  嗯,最后一步了,调用上一步创建的类。

 update-database

问题2:使用的过程中遇到了什么问题?

1:Mysql,中文乱码,生成语句,运行出错:

解决方案:修改配置文件将mysql默认编码设置为UTF8;

#path:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini


[client] 
default-character-set=utf8 

[mysqld]
# 修改处2:添加以下3行 
default-storage-engine=INNODB
character-set-server=utf8 
collation-server=utf8_general_ci

#说明‘#’代表注释,可以直接追加到文件最后
#附执行查看mysql编码命令:
#mysql> show variables like "%char%";

再EF连接字符串中追加指定编码

;Character Set = utf8;

 

.NET Framework 4.0上使用Entity Framework连接MySQL数据库需要进行以下步骤: 1. 安装MySQL Connector/Net,可以从MySQL官方网站下载。 2. 在Visual Studio中创建一个新的项目,选择“Class Library”作为项目类型。 3. 在项目中安装Entity Framework,可以通过NuGet包管理器安装。 4. 在项目中添加对MySQL Connector/Net的引用。 5. 在App.config或Web.config文件中添加如下配置(替换相应的数据库连接信息): ```xml <configuration> <connectionStrings> <add name="MySqlConnection" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;uid=username;password=password;database=mydatabase"/> </connectionStrings> <entityFramework> <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"/> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"/> </providers> </entityFramework> </configuration> ``` 6. 创建一个继承自DbContext的类,用于定义实体类和数据库表之间的映射关系。例如: ```csharp using System.Data.Entity; using MySql.Data.EntityFramework; namespace MyNamespace { [DbConfigurationType(typeof(MySqlEFConfiguration))] public class MyDbContext : DbContext { public DbSet<MyEntity> MyEntities { get; set; } public MyDbContext() : base("MySqlConnection") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<MyEntity>() .ToTable("mytable") .HasKey(x => x.Id); } } public class MyEntity { public int Id { get; set; } public string Name { get; set; } } } ``` 7. 使用MyDbContext类进行数据库操作。例如: ```csharp using (var context = new MyDbContext()) { var entity = new MyEntity { Name = "Test" }; context.MyEntities.Add(entity); context.SaveChanges(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值