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=".\logs\stdout" 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM