VS2010的数据库连接工具已经不支持SQL Server2000了,自然也就无法用可视化的方法使用Entity Framework。最近因为需要对两个老系统进行改造,用的都是2000数据库,第一个因为比较简单,所以我直接把数据库升级到2005 ,然后修改系统配置。但是第二个升级会比较麻烦,而我又想用Entity Framework,最终在一个老外的博客上找到了一个方法,原文地址:http://www.skonet.com/Articles_Archive/How_To_Use_Entity_Framework_4_With_Visual_Studio_2010_and_SQL_Server_2000.aspx 。

    下面我来详细介绍一下步骤。
    1.用VS2010新建一个项目,为简单起见建了个控制台项目;
    2.在项目中新建一个ADO.NET实体数据模型,选择空模型,名称设为MyModel,如图:
    

VS2010连接SQL Server2000并使用Entity Framework_VS2010

VS2010连接SQL Server2000并使用Entity Framework_Entity Framework_02

VS2010连接SQL Server2000并使用Entity Framework_VS2010_03

 

    4.右击项目中的MyModel.edmx选择打开方式->XML(文本)编辑器

VS2010连接SQL Server2000并使用Entity Framework_Entity Framework_04

    5.复制第3步中下载的文件内容全部替换4中的内容;
    6.Ctrl+F把所有%DB_NAME% 替换成MyModel,共6处替换,替换完成后保存关闭该页,不关闭后面可能会出问题;
    7.在项目中新建一个配置文件App.config,把以下配置节复制到App.config,
    <connectionStrings>
     <add name="%DB_NAME%Entities" connectionString="metadata=res://*/%DB_NAME%.csdl|res://*/%DB_NAME%.ssdl|res://*/%DB_NAME%.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=%DB_HOST_NAME%;Initial Catalog=%DB_NAME%;Persist Security Info=True;User ID=%DB_USER%;Password=%DB_USER_PWD%;MultipleActiveResultSets=False&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

  8.把配置中的所有%DB_NAME%替换成MyModel,共5处替换,修改%DB_HOST_NAME%为你的数据库实例名,
例如我的安装实例名为SQL2000,就应该是Data Source=.\SQL2000如果是默认实例安装就是Data Source=. 
当然也可以是远程的服务器;
  9.Initial Catalog=%DB_NAME% 这里的%DB_NAME% 改成你要连接的库的名称(在第8步中已经被替换成MyModel了,如果你库的名称也为MyModel则不用改),例如我要连接的库的名称是fit_netVS2010连接SQL Server2000并使用Entity Framework_Entity Framework_05Initial Catalog=fit_net 
  10.替换%DB_USER% 为你的数据库登录名,例如我的为sa,替换%DB_USER_PWD%为你的数据库登录密码,
例如我的为sa,User ID=sa;Password=sa 
配置完成后如下图 :

VS2010连接SQL Server2000并使用Entity Framework_VS2010_06

  11.双击直接打开MyModel.edmx(设计视图模式打开),右击页面选择从数据库更新模型,就可以直接连上2000数据库了,
而不需要用VS2010先进行可视化的连接(想连接你也连接不上,除非用VS2008,当然这不是这里要解决问题的方法);

VS2010连接SQL Server2000并使用Entity Framework_SQL Server2000_07


表都出来了,在这里选择你想映射的表:

VS2010连接SQL Server2000并使用Entity Framework_VS2010_08


经测试,同样支持“添加代码生成项”,想支持POCO的可以继续以下操作(如果你用的是EF4.1以上版本):
 

VS2010连接SQL Server2000并使用Entity Framework_Entity Framework_09

 

VS2010连接SQL Server2000并使用Entity Framework_VS2010_10(注:要使用这个功能需要安装额外的插件,比ObjectContext更轻量,这里不作介绍。)

 

VS2010连接SQL Server2000并使用Entity Framework_VS2010_11(注:我习惯用一样的名称)

 

VS2010连接SQL Server2000并使用Entity Framework_SQL Server2000_12(整个项目就是这样);

 
 

VS2010连接SQL Server2000并使用Entity Framework_Entity Framework_13

(生成的类很简单,没有传统edmx里那些臃肿的代码,支持持久化透明。)
 
  最后总结一下:
  1.能用2005以上版本数据库就不要用2000;
  2.如果老系统用的是2000,但升级比较方便的话最好升级到2005以上版本;
  3.如果实在不方便升级,最后再考虑这种方法,Entity Framework对2000的支持并不是特别好,即使
能连上可能有些功能也没法用,用的时候小心。常用的功能没问题,可以避免写大量的代码,
但如果发现有些功能无法实现,最好手写代码,已经不算麻烦了;
  4.相信我,总会有问题的,墨菲定律:如果一件事有一定的几率变得更糟,那它一定会变得更糟。