Vs2013集成EF和SQLite的步骤(二)

本来以为不需要写这个二的。

按步骤一的过程安装配置好以后,在vs2013中已经可以用服务器资源管理器正常地访问建好的SQLite数据文件,也可以在项目中新建实体对象。使用EF的dbfirst方式也能正常地从数据库刷新对象。

谁知道到了后面,在程序中需要访问数据库的时候,执行到db.savechanges时,报未找到具有固定名称“System.Data.SQLite”的 ADO.NET 提供程序的实体框架提供程序的错误,原来坑在这里等着。

翻了好久网页,才终于解决这个问题。

解决方法是在app.config中加上System.Data.SQLite的provider。

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework> 
 <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
    </DbProviderFactories>
  </system.data>

其实网上也有好几个回答是这个解决办法的,但是最容易搜到的几个好像都是错的。

应该添加名为System.Data.SQLite.的provider,type应该是“System.Data.SQLite.SQLiteFactory, System.Data.SQLite”,而网上好几个回答里面都只改了名字而type仍然是“System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6”。开始的时候我照着这个答案没有修改,结果一直还是报错。最后改成现在的写法,才能顺利通过。


ps:过了这个坑后,又发现另一个坑。在网页中使用ef对数据进行操作的时候,报“The underlying provider failed on Open sqlite”的错误。原因是ef默认使用当前用户的权限来访问数据库。当应用是网页的时候,就会使用IIS_IUSRS用户来访问SQLite数据文件。所以数据文件所在的文件夹要加上IIS_IUSRS的访问权限,那样就可以顺利访问了。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值