Baiyangcao

A dobe Programmer

Follow me on GitHub

EntityFramework使用SQLite数据库

13 Mar 2017

EF6可以使用System.Data.SQLite库连接SQLite数据库,但是并不能支持Code First功能

使用nuget安装Install-Package System.Data.SQLite会自动安装,然后会自动在配置文件中添加一些配置, 手动在配置中加入链接字符串,注意使用providerName="System.Data.SQLite.EF6", 链接字符串中的|DataDirectory|表示App_Data文件夹:

<connectionString>
  <add name="SqliteTest" connectionString="data source=|DataDirectory|\SqliteTest.db" providerName="System.Data.SQLite.EF6" />
</connectionString>

这里需要注意,直接使用默认的配置文件会报错:

Unable to determine the provider name for provider factory of type 'System.Data.SQLite.SQLiteFactory'. 
Make sure that the ADO.NET provider is installed or registered in the application config.

需要做如下修改:

  1. DbProviderFactories节点下的两个invariantName="System.Data.SQLite" 改为invariantName="System.Data.SQLite.EF6"
  2. provider节点下添加如下节点:
```
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
```

当然即使做了这些更改还是会报错无法加载SQLite.Interop.dll, 其实在安装的NuGet包中就含有SQLite.Interop.dll文件,在packages\System.Data.SQLite.Core.1.0.94.0\build文件夹下, 我们可以在bin文件夹的x64或者x86文件夹下找到对应版本,所以可以将程序的目标平台改为x86即可运行, 或者按照Any CPU的配置发布,配置在IIS中也是可以运行的。

不过EntityFramework和SQLite用起来真的是心累啊。。。

参考链接:

https://damienbod.com/2013/11/18/using-sqlite-with-entity-framework-6-and-the-repository-pattern/ http://www.csdn123.com/html/topnews201408/51/4651.htm