• MySql + EF6 + .Net Core


    2016年8月17日01:21:29 更新:这里介绍一下一个开源的 EF Core 的 MySQL 组件 [MySQL for .NET Core - Pomelo 扩展包系列][http://www.1234.sh/post/pomelo-data-mysql]

    前请提要:http://www.cnblogs.com/JacZhu/p/5631075.html
    在上面的那篇文章里面我成功的引用了 EF6 但是默认的数据库使用的是 SqlServer ,下面我会将 MySql 添加到项目中来。

    准备 web.config 文件

    讲道理 appsettings.json 这个文件应该是代替了 Web.config 的,然而在接下来的配置中还是需要这个文件。
    先把下面的内容添加到 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.1.3.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <!--
        Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
      -->
      <system.webServer>
        <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" forwardWindowsAuthToken="false" />
      </system.webServer>
      <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.8, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
        </DbProviderFactories>
      </system.data>
      <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="v13.0" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.8, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
        </providers>
      </entityFramework>
    </configuration>
    

    注意,这里我把ParkDbContext换成了EFDbContext

    重新注册DI

    由于我们的连接字符串是在解析依赖性的时候注入的,所以DbProvider也需要我们使用同样的方法来注入依赖性
    还是在 Startup.cs 文件中的ConfigureService方法中添加绑定

    services.AddScoped(sp =>
    			{
    				var conn = DbProviderFactories.GetFactory(Configuration["ConnectionStrings:providerName"]).CreateConnection();
    				conn.ConnectionString = Configuration["ConnectionStrings:DefaultConnection"];
    				return new EFDbContext(conn);
    			});
    

    同时我们需要更新 appsettings.json 文件

    {
      "ConnectionStrings": {
        "DefaultConnection": "server=*******.com;user id=asaftp;password=********;persistsecurityinfo=True;database=asaftp",
        "providerName": "MySql.Data.MySqlClient"
      },
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Debug",
          "System": "Information",
          "Microsoft": "Information"
        }
      }
    }
    

    本来我以为弄完了上面的步骤就OK了,然而剧情就如往常一样,问题并没有解决,会报错说找不到 EntityFramework provider所以我只好在EFDbContext声明的地方加了个特性

    	[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    

    网上说在 Web.Config 文件中做出如下修改也是可以的:

    <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">
    

    但是我试过了,发现没用

    总结

    估计很少会有人像我这么蛋疼的来写代码了,希望EF Core 能够尽快的支持 MySql ,这样 ASP.NET Core 完全跨平台就指日可待了!


    参考资料:
    http://stackoverflow.com/questions/15142841/no-entity-framework-provider-found-for-mysql-data-mysqlclient-ado-net-provider

  • 相关阅读:
    使用vue来开发一个下拉菜单组件(2)
    使用vue来开发一个下拉菜单组件(1)
    在Vue中引入Bootstrap,Font-awesome
    九宫格表格样式
    web upload 上传多张图片实例
    input 的multiple 上传多个文件
    常用 验证码 JS 代码
    最全 H5 form 表单 + 正则验证
    mysql的指令
    Ant编译MapReduce程序
  • 原文地址:https://www.cnblogs.com/JacZhu/p/5631715.html
Copyright © 2020-2023  润新知