之前编写有关数据库的项目时,都是通过ADO.NET使用原始的SQL语句进行数据的读写的,个人觉得这种方式对数据的操作更能够“随心所欲”,而且很容易切换不同的数据库,所以对Entity Framework不感兴趣。近期看了以下EF相关的东西,发现之前写的所有内容都能够使用EF,而且更简单、快捷,甚至根本不用去百度一些很复杂的SQL语句了,所以在现在的一个测试项目中,果断的采用了Visual Studio 2012以及Entity Framework、MySQL的方式,果然节省很多时间。
由于Visual Studio以及Entity Framework本身和SQLServer结合的就很好,所以很容易搭建一个开发和运行环境,但是如果要使用其他类型的数据库,如MySQL,就需要简单的配置一下,下面是我个人总结的一些经验。
首先,需要在Visual Studio的项目上使用NuGet管理依赖的程序包,搜索MySQL,如下图所示:
在搜索到的结果中,选择“MySql.Data.Entity”并安装,在这个过程中,它同样会安装依赖的“MySql.Data”库相关的文件。安装成功后,在项目的引用节点中会出现MySql相关的文件,如下图所示:
如果项目时Windows Class Library类型,那么在项目的App.config文件中,会自动添加以下配置:
<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> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> </provider></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.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories> </system.data></configuration>
其中添加了EntityFramework的Provider,并加Provider工厂设置为MySql的提供程序。如果是Web工程,如MVC,则会在Web.config文件中增加如下配置:
<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v12.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> </provider></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.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories> </system.data>
以上内容都是通过NuGet管理依赖包得到的,我使用的Code First的方式,在定义了自己的DbContext后以为就可以使用了,结果程序还是使用SQLServer的提供程序,于是百度了很多解决方法,大多都是以上内容。后来在MySql的官网上搜索了一下Entity Framework,发现在定义DbContext的实现时,需要加入DbConfigurationType属性来指明使用哪一个配置,如下所示:
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
class SimpleDbContext : DbContext
{
public SimpleDbContext(string connectionString)
: base(connectionString)
{
}
}
之后就一切正常了。需要注意的是,虽然MySql能够很好的支持Entity Framework,但是毕竟不是.Net原生支持的,需要研究的地方还很多。
转载于:https://blog.51cto.com/jslmes/1603171