Entity Framework使用Sqlite时的一些配置
作者:网络转载 发布时间:[ 2015/7/3 13:47:15 ] 推荐标签:数据库 SQLite
3. 遇到的异常3
使用了上面的方法,上面的那个异常没了,又一个新的来了。
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.
Sqlite的那些包是通过NuGet安装的,但是NuGet貌似没有帮忙生成完整的配置,所以需要自己补上。
这里贴上的是完整的,注意红色的是添加的:
<system.data>
<DbProviderFactories>
<span style="color: #ff0000;"><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"/></span>
<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" />
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<span style="color: #ff0000;"><provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /></span>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
</entityFramework><br>
4. 虽然使用的是Code First,但是System.Data.SQLite.EF6是不能帮助我们自动生成数据库的表结构的,需要手动创建。(当然,可以找找有没有其他支持Sqlite的Migration的EF Provider)
OK了,到此这几个坑算是填平了。
5. 设置DataDirectory
我的Sqlite的连接字符串是这样写的:
<add name="BloggingContext_SQLite" connectionString="Data Source=|DataDirectory|Blogging_SQLite.db" providerName="System.Data.SQLite.EF6"/>
为了开发方便,我将数据库文件放在了项目里面,这个样子:

怎样告诉连接字符串DataDirectory在这里呢?
private static void SetDataDir()
{
DirectoryInfo baseDir = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
string data_dir = baseDir.FullName;
if ((baseDir.Name.ToLower() == "debug" || baseDir.Name.ToLower() == "release")
&& (baseDir.Parent.Name.ToLower() == "bin"))
{
data_dir = Path.Combine(baseDir.Parent.Parent.FullName, "App_Data");
}
AppDomain.CurrentDomain.SetData("DataDirectory", data_dir);
}
在程序初始化时调用。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com