澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

ABP入门系列

  由于工作需要,从本地Sqlite数据库转为MySql数据库。遇到了一些坑,随后又埋了。记录下过程:

之前网站一直用的Asp.net MSSQL 2000的数据库,结果新的项目说MSSQL数据库太贵,需要改用MySql,改之。

ABP入门系列目录——学习Abp框架之实操演练
源码路径:Github-LearningMpaAbp

 一、安装MySql

  首先上官网下载windows版的MySql.解压。详情是参考了几位同鞋的文章:

         MySql 5.7.20安装

         Mysql5.7.20压缩版下载和安装

 


 二、连接MySql

     2.1在NuGet管理器中下载MySql.Data,选的是6.9.10

      澳门新浦京娱乐场网站 1

 

    2.2 由于之前用的是DbConnection等一系列的类,因此只需改下数据库连接与调整下SQL语句便可以切换数据库了

    

public static DbConnection CreateConnection()
        {
            if (string.IsNullOrEmpty(DbHelper.dbProviderName))
                dbProviderName = "MySql.Data.MySqlClient";
            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
            DbConnection dbconn = dbfactory.CreateConnection();
            dbconn.ConnectionString = DbHelper.dbConnectionString;
            return dbconn;
        }

   2.3 上面所说到的坑就是假如NeGet中选的版本是6.10.5的话。以下语句中DataTable返回的是NULL.

      public DataTable ExecuteDataTable(DbCommand cmd)
        {
            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(DbHelper.dbProviderName);
            DbDataAdapter dbDataAdapter = dbfactory.CreateDataAdapter();
            dbDataAdapter.SelectCommand = cmd;
            DataTable dataTable = new DataTable();
            dbDataAdapter.Fill(dataTable);
            return dataTable;
        }

 经苦苦查找,发现原来是此版本的MySql.Data.Dll的Buy!

over.

 

Connector/Net 6.3.5

最新版数据库连接器下载地址:
安装以后,在项目中引入对应动态链接库MySql.net、及using命名空间:MySql.Data.MySqlClient(这个代码中已经引入)

1. 引言

Abp支持MySql已经不是什么新鲜事了,但按照官方文档:Entity Framework - MySql Integration来,你未必能成功切换,本文就记录下切换MySql数据库遇到的一些坑,供后人乘凉!

自此之前MSSQL代码中 语句,只需要查找Sql全部替换为MySql,即可,之前可以用SqlServer数据库的代码,直接可以用MySql数据库了。

2. 环境准备

MySql数据库好啊,开源免费,不再像SqlServer那样累赘。而且结合.Net Core,他俩贼般配的说!但MySql自从卖给Oracle后,好像就不怎么好玩了,安装起来还是挺费劲的说。一怒之下,转投MariaDB。

MariaDB由MySQL之父Michael Widenius主导开发的,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。MariaDB是目前最受关注的MySQL数据库衍生版,也被视为开源数据库MySQL的替代品。

MariaDB完全兼容MySql,所以就放一百二十个心好了。就不废话了,自行点击MariaDB Downloads下载安装吧。

出现问题1:"找不到请求的 .Net Framework 数据提供程序。可能没有安装。"错误

3.开始切换环境

本文还是基于我之前的LearningMpaAbpDemo进行演示。

 

3.1. 安装MySql.Data.Entity

Solution-->右键-->'Manage NuGet Packages for solution...',安装MySql.Data.Entity到以”.Web"和“.EntityFramework”结尾的项目中去,如下图:
澳门新浦京娱乐场网站 2
注意版本号,安装最新,我可不保证可以成功!
ABP入门系列。修改“.EntityFramework”结尾的项目Migrations文件夹下的Configuration.cs类,在构造函数中添加SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());。如下所示:
澳门新浦京娱乐场网站 3

采用上面将整个项目中的Sql替换为MySql的方式,在本地测试页面没问题,但提交

3.2. 设置连接字符串

修改Web.Config,添加连接字符串:
<add name="Default" connectionString="server=localhost;port=3306;database=sampledb;uid=root;password=***" providerName="MySql.Data.MySqlClient"/>
之前的连接字符串就注释掉吧!

这一部分在服务器上如何操作。?!!
在开发阶段,通过安装mysql-connector-net-6.3.5.zip的方式,开发是没问题的。
但如果部署到服务器上时,由于服务器未安装此connector可能会出现问题。

3.3. 重新添加迁移

如果你的Migrations文件夹下有很多以日期开头(比如:20171122022_)的迁移文件,全部删掉他们!
然后Tools-->Nuget Package Manage--> Package Manage Console:输入Add-Migration "Abp_MoveTo_Mysql"执行:
澳门新浦京娱乐场网站 4

是的,你可能执行不成功,会遇到第一个坑:

Type is not resolved for member 'MySql.Data.MySqlClient.MySqlException,MySql.Data, Version=6.9.10.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d'.

如何搞呢?下载MySql为.Net平台提供的Connector安装就好了,
安装地址:Download Connector/Net。记住要选对对应的版本:
澳门新浦京娱乐场网站 5

安装后,重新执行以上命令即可。

澳门新浦京娱乐场网站, 

3.4. 执行迁移

执行命令Update-Database -Verbose,这个时候你会遇到第二个坑:

Index column size too large. The maximum column size is 767 bytes.

这是因为mysql对列的大小有限制。EF6使用MigrationHistory表跟踪模式的变化,以确保一致性的数据库模式和概念模式。由于主键太大,默认情况下此表不适合MySQL。要解决这种情况,需要缩小该表的键大小。具体可以参考以下两个链接:

  1. Entity Framework with MySql and Migrations failing because “max key length is 767 bytes”
  2. Entity Framework 6 Support

这边有个简单的做法,只需修改DbContext类上添加[DbConfigurationType(typeof(MySqlEFConfiguration))]声明即可。如下:
澳门新浦京娱乐场网站 6

重新执行迁移命令,即可!

 解决方法:参考:

4. 最后

好久没更新了,现在重拾Abp,后续会结合ABP .Net Core MySQL,带给大家进阶分享,尽情期待!

 

在web.config中加入如下代码,解决提示“找不到请求的 .Net Framework 数据提供程序。可能没有安装。”的问题。

<!--MySql使用-->
    <system.data>
        <DbProviderFactories>
            <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.3.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
        </DbProviderFactories>
    </system.data>

  

问题 解决!

如果你的版本不是6.3.5.0,只需修改上面代码中的Version=版本即可。

额外阅读:asp.net2.0利用MySQL ODBC Driver-MyODBC 3.51连接MYSQL数据库技巧

本文由澳门新浦京娱乐场网站发布于数据库,转载请注明出处:ABP入门系列