System.Data.SQLite.SQLiteException:无法打开数据库文件(初始化数据库时发生异常)

System.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;

我尝试使用Entity Framework 6.2和VS2017 15.9.4创建一个简单的数据库

但是,数据库不会创建

这里是DbContext

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>