DatabaseExists失败的SQLite操作(.NET 4.0,EF 4.4)

时间:2015-11-18 16:56:04

标签: c# sqlite .net-4.0 entity-framework-4

我使用的是.NET 4.0和Entity Framework 4.4

我已经使用了多年的代码突然抓住了我 - 而且我完全陷入了原因。我已经将问题代码简化为一个非常简单的序列。请注意,如果我在磁盘上创建物理文件,代码行为不会改变;它根本没有参与这个问题。

string sDatabaseFilename = @"c:\users\bob\database.sqlite";
//System.IO.File.Create(sDatabaseFilename).Close();
System.Data.SQLite.SQLiteConnection cConnection = new System.Data.SQLite.SQLiteConnection("DataSource=" + sDatabaseFilename);
System.Data.Entity.DbContext dbContext = new System.Data.Entity.DbContext(cConnection, false);
System.Data.Entity.Database dDatabase = dbContext.Database;

dDatabase.ExecuteSqlCommand("PRAGMA foreign_keys=ON;");

app.config数据提供者:

  <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />

尝试触摸dDatabase(例如上面的ExecuteSqlCommand)或访问dbContext.ObjectContext会导致

System.Data.ProviderIncompatibleException occurred
  HResult=-2146232032
  Message=DatabaseExists is not supported by the provider.
  Source=System.Data.Entity
  StackTrace:
       at System.Data.Common.DbProviderServices.DbDatabaseExists(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection)
  InnerException: 

我使用了v1.0.88 SQLite的东西,然后它停止工作(我在同一个解决方案中的一个单独的项目中愚弄了一些HTML抓取)。我已升级到SQLite v1.0.98以尝试解决问题,但没有运气。

2 个答案:

答案 0 :(得分:1)

问题的原因是EF尝试初始化db。 在使用context设置为null初始化器之前。

Database.SetInitializer<DbContext>(null);

答案 1 :(得分:0)

我无法弄清楚问题,但我最终解决了这个问题。

解决方法是创建新解决方案并从原始源文件再次构建项目。我首先创建了一个准系统解决方案,以确定我需要什么才能使其工作,然后从那里构建。

没有解决问题的事情:

  1. 通过NuGet将损坏的解决方案升级到EF 6.0和相应的SQLite。

  2. 将损坏的解决方案的app.config和packages.config文件与准系统解决方案相匹配。

  3. 尝试通过删除与准系统解决方案不匹配的部分来“清理”已损坏解决方案中的项目文件。

  4. 无论是什么导致我的旧解决方案的问题在项目文件中的某个地方,但我从未发现它是什么。请注意,这完全适用于Visual Studio 2010。