Настройка JetEntityFrameworkProvider в VS2017

#jet-ef-provider

Вопрос:

После компиляции моего проекта в VS2017 15.9.21 for.NET 4.5, я получил следующую ошибку, что я упускаю?

 Unable to determine the provider name for provider factory of type 'JetEntityFrameworkProvider.JetProviderFactory'. Make sure that the ADO.NET provider is installed or registered in the application config.
 

Диалоговое окно об ошибке

Именно здесь возникает исключение:

 JetConnection.ShowSqlStatements = True

Dim fac1 = New JetConnectionFactory()
Dim con1 = fac1.CreateConnection(ORMGlobal.ConnectionString)

Using db As ORM = New ORM(con1)
    Dim model = db.People.Count()
    ' ...
End Using
 

Это моя настройка DbContext:

 Partial Public Class ORM
    Inherits DbContext

    Public Sub New()
        MyBase.New()
        Database.SetInitializer(New NullDatabaseInitializer(Of ORM))
    End Sub

    Public Sub New(con As Common.DbConnection)
        MyBase.New(con, True)
        Database.SetInitializer(New NullDatabaseInitializer(Of ORM))
    End Sub

    ' ...
End Class
 

Это мой config.app

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <entityFramework>
    <providers>
      <provider invariantName="JetEntityFrameworkProvider" type="JetEntityFrameworkProvider.JetProviderServices, JetEntityFrameworkProvider" />
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="JetEntityFrameworkProvider"/>
      <add invariant="JetEntityFrameworkProvider" name="Jet Entity Framework Provider" description="Jet Entity Framework Provider"
        type="JetEntityFrameworkProvider.JetProviderFactory, JetEntityFrameworkProvider"/>
    </DbProviderFactories>
  </system.data>
</configuration>

 

Сведения об исключении:

 Exception thrown: 'System.NotSupportedException' in EntityFramework.dll
5/20/2021 3:49:07 PM :dwl: :LV:: Error in ConnectToDSN: System.NotSupportedException: Unable to determine the provider name for provider factory of type 'JetEntityFrameworkProvider.JetProviderFactory'. Make sure that the ADO.NET provider is installed or registered in the application config.
   at System.Data.Entity.Utilities.DbProviderFactoryExtensions.GetProviderInvariantName(DbProviderFactory factory)
   at System.Data.Entity.Infrastructure.DependencyResolution.DefaultInvariantNameResolver.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.CachingDependencyResolver.<>c__DisplayClass4_0.<GetService>b__0(Tuple`2 k)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Data.Entity.Infrastructure.DependencyResolution.CachingDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass5_0.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.RootDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass5_0.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.CompositeResolver`2.GetService(Type type, Object key)
   at System.Data.Entity.Infrastructure.DependencyResolution.DbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key)
   at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInvariantName(DbConnection connection)
   at System.Data.Entity.Internal.InternalConnection.get_ProviderName()
   at System.Data.Entity.Internal.LazyInternalContext.get_ProviderName()
   at System.Data.Entity.Internal.DefaultModelCacheKeyFactory.Create(DbContext context)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.Initialize()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
   at System.Linq.Queryable.Count[TSource](IQueryable`1 source)
   at TheBoardRoom.LockView.SQLdbHandler.ConnectToDSN(String sConnDSN, ADOConnectionamp; connDB)
 

Комментарии:

1. Я думаю, что эта фабрика требует регистрации GAC. Попробуйте подключиться напрямую с помощью JetConnection.

2. На какой фабрике? Я просто добавил оба JetEntityFrameworkProvider и EntityFramework в GAC, а затем перестроил. Тот же результат, ошибка сохраняется.

3. Вместо (New JetConnectionFactory()).CreateConnection(ORMGlobal.ConnectionString) этого попробуйте использовать New JetConnection(ORMGlobal.ConnectionString) .

4. Я так и сделал. Но это ничего не исправит. Есть такое же исключение. Я думаю, что как-то JetEntityFrameworkProvider неправильно зарегистрирован config.app . Для справки, я использую последнюю EF6.4.4 версию . Вы сделали эту JetEntityFrameworkProvider работу в VS2017 VB.NET проект?