带有SQLite 1.0.108.0查询的实体框架6永远挂起

时间:2018-10-17 08:11:50

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

我们有一个x86位winforms应用程序,它是.Net 4.0并使用EF 6.2 和SQLite 1.0.108.0。

应用程序在大多数计算机上的某些机器上运行良好,当查询sqlite db文件中的任何表时,它会永久挂起。

我们能够创建上下文,但是在调用第一个查询后,它就挂了。

此外,呼叫GC.WaitForPendingFinalizers()也将永远挂起。

还值得一提的是,使用System.Data.SQLite.SQLiteConnectionSystem.Data.SQLite.SQLiteCommand很好用。

之前没有通过EF上下文对db的调用,因此不应存在任何仍未释放的与DB的持久连接。

我的上下文类是:

public class MyClientContext : DbContext
{
    static MyClientContext ()
    {
        Database.SetInitializer<MyClientContext >(new 
        CreateDatabaseIfNotExists<MyClientContext >());
        Database.DefaultConnectionFactory = new EncryptedConnectionFactory();
    }

    public eReceiptPosClientContext(string connectionString)
    : base(Database.DefaultConnectionFactory.CreateConnection(connectionString), true)
    {
    }

   // DBsets here

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
       // Mappings here
   }
}
App.Config中的

EF和SQLite配置:

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>



<system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>

更新

我现在确定这与处置存储库对象有关。我认为将对象处置称为实际上并没有处置任何东西。

这就是为什么调用GC.WaitForPendingFinalizers()挂起的原因。

下面是我创建和使用存储库的方法:

using (var repo = new SettingsRepository(dbConnString))
{
    repo.GetValue(HasValidReceiptsKey);
}

GetValue()内:

return _db.Settings.Where(k => k.Key == key).FirstOrDefault();

真的是处置不起作用吗?

或者我错过了什么。

任何帮助将不胜感激。

谢谢

Mousa Shawar

0 个答案:

没有答案