• ADO.NET Entityframework MYSQL provider


         接触ADO.NET Entityframework有一段时间了,在实际项目的应用中有一个最大的问题就是M$没有对多种数据库提供支持,在笔者最近碰到的一个网站项目中,公司要求使用MYSQL,到处找MYSQL的EFProvider,发现Devart dotConnect还不错,提供了比较完善的解决方案,只是在自动从数据库提取物理模型中存在编码的问题,到目前还没有找到解决办法,但是Devart dotConnect是收费的,专业版得上千美刀,有Free Edition,但是不提供对EntityFramwork的支持。无奈,寻找其他的解决方案。

         偶然间在一份SUN的文档中有提到在未来版本中对AEF的支持,到MYSQL.com下载最新的MySql.Data.dll为5.2.5版,并没有对AEF提供支持,再到源码服务器,惊喜得看到多了一个MySql.Data.Entity项目,MySql.Data也已经到了5.3.0版。立刻下载。

         下载后先编译MySQL.Data,并签名程序集,MySQL.Data.Entity引用MySQL.Data,编译并签名,取得MySQL.Data.Entity的PublicKeyToken,修改MySQL.Data中类MySqlClientFactory的IServiceProvider.GetService方法相关的代码,将Provider类型指向刚才编译好的MySQL.Data.Entity程序集中的MySql.Data.MySqlClient.MySqlProviderServices类,修改后大概就像下面的样子。

    Code

         

         注意PublicKeyToken的值,要和MySQL.Data.Entity程序集对应。OK,再重新编译得到MySQL.Data.dll和MySQL.Data.Entity.dll。

         将这两个文件安装进GAC中。

         接下来注册我们的provider,打开machine.config,在system.data/DbProviderFactories节点中,添加下面的元素:

    Code

         注意这里程序集PublicKeyToken的值,要和MySQL.Data程序集的PublicKeyToken一致。

         这样,在我们的程序中就可以使用AEF for MySQL了,测试一下。

         建立测试库和测试表:

    Code

         对立对应的物理模型TestDB.ssdl:

    Code

         概念模型:TestDB.csdl

    Code

         以及映射文件:TestDB.msl

    Code

         这样模型配置就完成了,我这里概念模型和物理模型中的字段名和属性名是不同的。

         为了能以实体类的方式操作数据库,利用下面的命令自动生成实体类文件:

         edmgen /mode:EntityClassGeneration /incsdl:TestDB.csdl /namespace:Test /project:Test

         把生成的文件包含到项目中,测试代码如下:

    Code

         到这里为止已经能够正常读取出数据,但是由于该组件还未正式发布,笔者也未进行详细的测试,稳定性、可靠性可能存在一定问题,希望有兴趣的朋友一起研究和学习,对在项目中急需使用AEF for MySQL的朋友能有所帮助。

         最后提供两个DLL文件的下载:AEF for MYSQL

  • 相关阅读:
    五 Servlet 技术
    二进制、八进制、十进制、十六进制之间怎样互相转换?
    HTML中怎样添加地图?
    特殊集合
    集合arraylist
    数组

    gif 命令大全
    for 循环与嵌套
    分支语句(switch case)
  • 原文地址:https://www.cnblogs.com/wisdomqq/p/1372136.html
Copyright © 2020-2023  润新知