我使用的是.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以尝试解决问题,但没有运气。
答案 0 :(得分:1)
问题的原因是EF尝试初始化db。 在使用context设置为null初始化器之前。
Database.SetInitializer<DbContext>(null);
答案 1 :(得分:0)
我无法弄清楚问题,但我最终解决了这个问题。
解决方法是创建新解决方案并从原始源文件再次构建项目。我首先创建了一个准系统解决方案,以确定我需要什么才能使其工作,然后从那里构建。
没有解决问题的事情:
通过NuGet将损坏的解决方案升级到EF 6.0和相应的SQLite。
将损坏的解决方案的app.config和packages.config文件与准系统解决方案相匹配。
尝试通过删除与准系统解决方案不匹配的部分来“清理”已损坏解决方案中的项目文件。
无论是什么导致我的旧解决方案的问题在项目文件中的某个地方,但我从未发现它是什么。请注意,这完全适用于Visual Studio 2010。