Entity Framework 6 с SQLite 1.0.108.0 запрос зависает навсегда - PullRequest
0 голосов
/ 17 октября 2018

У нас есть x86-битное приложение winforms, которое является .Net 4.0 и использует EF 6.2 и SQLite 1.0.108.0.

Приложение работает нормально на большинстве машин, на некоторых оно просто навсегда зависает при запросе любой таблицы вsqlite db file.

Мы можем создать контекст, но после вызова первого запроса он просто зависает.

Кроме того, вызов GC.WaitForPendingFinalizers() также навсегда зависает.

Также стоит отметить, что использование System.Data.SQLite.SQLiteConnection и System.Data.SQLite.SQLiteCommand работает нормально.

Нет предварительных обращений к БД через контекст EF, поэтому не должно быть никаких длительных соединений с БД, которые все еще не расположены.

Мой класс контекста:

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
   }
}

Конфигурации EF и SQLite в App.Config:

<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>

Обновление:

Теперь я уверен, что это проблема удаления объекта хранилища.Я думаю, что вызов объекта dispose на самом деле ничего не удаляет.

Вот почему вызов GC.WaitForPendingFinalizers () зависает.

Ниже описано, как создать и использовать репо:

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

А внутри GetValue():

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

Неужели утилизация не работает?

Или я что-то упускаю.

Любая помощь будетБуду очень признателен.

Спасибо,

Муса Шавар

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...