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 完全跨平台就指日可待了!