[EF]vs15+ef6+mysql code first方式

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

写在前面

前面有篇文章,尝试了db first方式,但不知道是什么原因一直没有成功,到最后也没解决,今天就尝试下code first的方式。

[EF]vs15+ef6+mysql这个问题,你遇到过么?

一个例子

步骤

  1. mysql-for-visualstudio-1.2.4.msi 下载该文件,然后运行安装(如果没安装,请先安装)。
  2. Connector/Net 下载该文件,并安装(如果没安装,请先安装)
  3. 使用Nuget安装EF
  4. 使用Nuget安装mysql提供程序。

在上面的步骤完成后,修改web.config文件,内容如下:

复制代码
<?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.5.2" />
  </startup>
  <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </providers>
  </entityFramework>
  <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.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=myshop;user id=sa;password=sa;" providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>
</configuration>
复制代码

注意entityFramework 节点,默认是不会有codeConfigurationType属性的,请添加。否则会出现下面的错误:Specified key was too long; max key length is 767 bytes

测试

实体类

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wolfy.Ef_MySql_CodeFirst
{
    public class Product
    {
        public int Id { set; get; }
        [MaxLength(128)]
        public string Name { set; get; }
        [MaxLength(128)]
        public string Category { set; get; }
        public decimal Price { set; get; }
        public DateTime CreateDate { set; get; }
    }
}
复制代码

插入信息

复制代码
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Wolfy.Ef_MySql_CodeFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            var dbContext = new MyContext();
            IDatabaseInitializer<MyContext> dbInitializer = null;
            if (dbContext.Database.Exists())
            {
                //如果数据库已经存在
                dbInitializer = new DropCreateDatabaseIfModelChanges<MyContext>();
            }
            else
            {
                //总是先删除然后再创建
                dbInitializer = new DropCreateDatabaseAlways<MyContext>();
            }            
            //Database.SetInitializer(dbInitializer);
dbInitializer.InitializeDatabase(dbContext); dbContext.Products.Add(
new Product() { CreateDate = DateTime.Now.AddDays(1), Name = "南孚电池", Category = "生活用品", Price = 3 }); dbContext.SaveChanges(); } } }
复制代码

还有一个错误经常出现

Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations.

大概意思是:不能检查模型的兼容性,因为数据库不包含模型元数据。在使用code first或者code fisrt迁移进行数据库创建的时候需要检查模型的兼容性。

此时,虽然生成了表_migrationhistory,但是该表内容为空。

这个时候可以将数据库删除,重新生成就可以解决。

其中表_migrationhistory为创建历史表。

Products表

发现添加的数据中中文为乱码,这是因为mysql默认的字符集为latin

关于乱码的解决方案很多,你可以修改数据库的字符集,或者数据表的字符集。也可以这样,修改连接字符串:

  <connectionStrings>
    <add name="MyContext" connectionString="Data Source=localhost;port=3306;Initial Catalog=myshop;user id=sa;password=sa;charset=utf8" providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>

 

 总结

折腾了一上午,一个简单的demo出来了。

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/4804617.html

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL Kubernetes 监控
在 k8s 环境中使用 mysql 部署 dolphinscheduler (非 helm 的方式)
在 k8s 环境中使用 mysql 部署 dolphinscheduler (非 helm 的方式)
1577 0
|
2月前
|
关系型数据库 MySQL C#
Visual Studio 2019 + EF6 + MySql +C#
Visual Studio 2019 + EF6 + MySql +C#
19 0
|
关系型数据库 MySQL 中间件
5分钟,使用yum方式完成mysql安装
5分钟,使用yum方式完成mysql安装
1902 1
5分钟,使用yum方式完成mysql安装
|
关系型数据库 MySQL
PureMySQL 一个MySQL简单操作方式
PureMySQL: 一个MySQL简单操作方式
60 0
|
安全 关系型数据库 MySQL
因安全要求,需要修改mysql同步用户repl的密码。在主库修改完后,从库最佳修改同步用户密码的方式
因安全要求,需要修改mysql同步用户repl的密码。在主库修改完后,从库最佳修改同步用户密码的方式
489 0
|
安全 关系型数据库 MySQL
【数据库】centos 7系统,二进制方式安装mysql
【数据库】centos 7系统,二进制方式安装mysql
283 0
【数据库】centos 7系统,二进制方式安装mysql
|
关系型数据库 MySQL 数据库
【Mysql数据库】数据库添加索引方式
【Mysql数据库】数据库添加索引方式
116 0
|
关系型数据库 MySQL Linux
Linux 使用rpm方式安装最新mysql(5.7.22)步骤以及常见问题解决
Linux 使用rpm方式安装最新mysql(5.7.22)步骤以及常见问题解决
185 0
Linux 使用rpm方式安装最新mysql(5.7.22)步骤以及常见问题解决
|
存储 SQL 弹性计算
MySQL 备份方式|学习笔记
快速学习 MySQL 备份方式
172 0
|
关系型数据库 MySQL Linux
MySQL 安装方式|学习笔记
快速学习 MySQL 安装方式
83 0