解决异常Unable to determine the provider name for connection of type SqlCeConnection的方法之一

  最近开发一个带有local data的WPF项目时遇到一个异常:Unable to determine the provider name for connection of type 'System.Data.SqlServerCe.SqlCeConnection'。

开发环境是:在VS2010 sp1下使用Entity Framework 4.1(Code-First) + Sql Compact Edition3.5 + WPF。

这个异常在我自己的电脑上没有遇到,但是在公司的电脑里这个问题就是过不去。在网上找了一圈,但是大多和我遇到的不一样,所以搁置了几天,不过今天有幸解决了,分享一下。

  在我的情况下,这个异常是由于所安装的数据库不同造成的。我自己电脑里使用的Sql Server 2008,默认自带Sql Compact Edition3.5,但是公司电脑里安装的是Sql Server 2008 R2,虽然默认也带有3.5版的local data,但是当将连接字符串写好后,无法连接本地数据库(local data),并提示上面的错误。

在正常的情况下,即Sql Server 2008 + Sql Compact Edition3.5,使用VS 2010创建的local data是3.5版本的,这样Entity Framework 4.1(Code-First) 的连接字符串如下:

<connectionStrings>
    <add name="OfflineContext" connectionString="Data Source=OfflineDb.sdf" providerName="System.Data.SqlServerCe.3.5" />
</connectionStrings>

其中,OfflineContext是EF(Code-First)中DbContext类的继承类,OfflineDb.sdf被放置在项目的根目录下,而providerName必须是System.Data.SqlServerCe.3.5这个值,呵呵,我开始就被这个给难住了。后来知道,它实际上是在machine.config(<windir>\Microsoft.NET\Framework\v4.0.30319\Config\)中定义的,我电脑里的情况如下:

<system.data>
    <DbProviderFactories>
           <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
</system.data>

但是如果你电脑里安装的是Sql Server 2008 R2版,你需要再安装一下Sql Compact Edition 4.0。 至于原因可能是当你安装Sql Server 2008 R2后,VS2010会自动创建4.0版的local data,这样你如果使用之前的连接字符串配置,就会得到标题里的错误。安装好4.0后,你只需修改连接字符串如下:

<connectionStrings>
    <add name="OfflineContext" connectionString="Data Source=OfflineDb.sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>

当然,在安装完Sql Compact Edition 4.0后,machine.config文件里也会多出一个Sql Compact Edition 4.0的配置节。

呵呵,描述完毕,希望对他人有点帮助吧。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值