• Entity Framework的连接字符串纯粹就是毛线


             有一种扯淡叫做毛线。      

             .NET的实体框架当前已经是4.1了,考虑到已经提供POCO功能,并且还支持多种数据库(这点可是Linq2Sql无法做到的),于是想试试。

            不可否认,EF强大的设计能力确实很方便。但是很困惑的地方就是在Sql Server 2008下,DateTime类型在数据库中只能使用datetime2,否则运行后会报错,据说Sql Server 2005就没这个问题,当然2005中也没有这种类型。

            一切都很顺利,直到有天想把现有网络版的软件转换成单机版的软件,问题就来了。

            原本打算是使用DB4O来进行单机数据存储,但需要实现相应的UnitOfWork和Repository,又想到EF是支持多数据库的,换成SQLCE不就行了,都是一家人,相互认识是必然的。修改下连接字符串吧,NHiberate可不就是这样的嘛!

            于是很自信地修改了下连接字符串,没想到还真出了问题。首先系统提示连接字符串有问题,折腾了一半天,原来在设计器的edmx文件中有和当前连接的数据库类型相关的信息,还必须通过XML设计器打开该文件进行修改;修改后又出现问题,提示SQL CE中不支持datatime2类型,猜到是映射的问题,又使用XML设计器打开文件手动逐一修改,同时还发现SQL CE中支持的字符串长度还不能超过4000,所有字符串超过4000的也会提示错误。

            找到了原因,又想到系统需要同时支持单机版和网络版,为了提高系统的灵活性,索性复制了一个edmx,然后配置其为SQL CE类型的数据库才解决问题。没有想到EF居然是以这种方式支持多数据库的,真是BT啊。

            总觉得这种解决方式有问题,搜索了一下,也找到了相应的解决办法:
    http://mosesofegypt.net/post/Multiple-database-support-with-Entity-Framework.aspx

         不过还是得使用XML编辑器打开edmx文件进行手动修改,还是得添加相应的提供者类型和字段映射定义。一想到如果结构有变化我就后怕,岂不是每次都要手动重复做这番工作?这点可比NHiberate差远了。

         在此终于恍然大悟,终于搞清楚EF的连接字符串为什么必须包含metadata的定义。如果要在运行时更换数据库,那么metadata的定义就必不可少,因为在其中还包含了不同数据库相关的提供者信息和字段映射信息。

         真没想到EF是以这种方式实现多数据库的支持的,原来支持和自动支持是有很大差距的。

         唉,真是......

         不知啥时能像NHiberate一样自动支持多数据库的ORM呢?

  • 相关阅读:
    利用URL Rewrite修改header头中的Server信息
    搭建Samba服务器
    Oracle创建数据库
    Linux下安装Oracle
    showModalDialog sesission丢失
    js写的打字游戏,功能非常简洁,菜鸟可以看看,高手就别来了
    wpf window镶嵌window,使用Frame实现
    A2-冒泡排序
    A1-递归求阶乘
    python将数据输出到excel中
  • 原文地址:https://www.cnblogs.com/gyche/p/2105439.html
Copyright © 2020-2023  润新知