System.Data.SQLite.SQLiteException:无法打开数据库文件(初始化数据库时发生异常)
我尝试使用Entity Framework 6.2和VS2017 15.9.4创建一个简单的数据库 但是,数据库不会创建 这里是DbContextSystem.Data.SQLite.SQLiteException:无法打开数据库文件(初始化数据库时发生异常),sqlite,entity-framework-6,Sqlite,Entity Framework 6,我尝试使用Entity Framework 6.2和VS2017 15.9.4创建一个简单的数据库 但是,数据库不会创建 这里是DbContext public class HelloDbContext : DbContext { public HelloDbContext() : base("name=ConnectionString") { } public DbSet<Setting> Settings { get; set;
public class HelloDbContext : DbContext
{
public HelloDbContext()
: base("name=ConnectionString")
{
}
public DbSet<Setting> Settings { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var sqliteConnectionInitializer = new SqliteCreateDatabaseIfNotExists<HelloDbContext>(modelBuilder);
Database.SetInitializer(sqliteConnectionInitializer);
}
}
以下是发生异常的代码
using (var ctx = new HelloDbContext())
{
try
{
var obj = new Setting { Name = "blue" };
ctx.Settings.Add(obj);
ctx.SaveChanges();
}
catch (Exception ex)
{
Console.WriteLine(ex);
throw;
}
}
这里是app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<system.data>
<DbProviderFactories>
<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.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" />
</DbProviderFactories>
</system.data>
<entityFramework>
<providers>
<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.SQLite"
type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=c:\mydb.sqlite" providerName="System.Data.SQLite"/>
</connectionStrings>
</configuration>
这看起来像是权限问题
System.Data.SQLite.SQLiteException: unable to open database file
数据库文件在app.config connectionString中设置为c:\mydb.sqlite
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=c:\mydb.sqlite" providerName="System.Data.SQLite"/>
</connectionStrings>
Windows有时对系统磁盘根目录中的文件有点奇怪(请尝试在系统磁盘根目录c:\中使用右键单击菜单thingy创建文本文件)。
您可以将app.config中connectionString的文件路径更改为一个新创建的文件夹,比如c:\testing stuff\mydb.sqlite(我疯狂地猜测c:\mydb.sqlite上没有创建任何东西,所以应该没有文件可以移动)。啊,谢谢,我突然想到了这个想法,但因为我复制了这个示例,所以我没有仔细检查。以前做一次一定没问题。
System.Data.SQLite.SQLiteException: unable to open database file
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=c:\mydb.sqlite" providerName="System.Data.SQLite"/>
</connectionStrings>