Laden...

Nach Update von EFCore 2.x auf 3.x bekomme ich Fehler

Erstellt von schuppsl vor 3 Jahren Letzter Beitrag vor 3 Jahren 980 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 3 Jahren
Nach Update von EFCore 2.x auf 3.x bekomme ich Fehler

verwendetes Datenbanksystem: MSSql

Hallo Gemeinde, mal wieder was kurioses.
In meiner .NET Framework 4.7.2 Anwendung EFCore implementiert.
Das Lief mit EfCore 2.4 perfekt.
Habe nun auf EfCore 3.1.8. geupdatet.

Als erstes musste ich AsQueryable() einbauen, da .where in EfCore und Linq implementiert ist.
Alles lässt sich wunderbar kompilieren

Teste ich nun eine Methode, erhalte ich beim Aufruf einer Abfrage wie z.B.

weiche = Context.NlWeiche.AsQueryable().Where(w => w.Id == 2).Single();

Folgende Fehlermeldungen:> Fehlermeldung:

Der Typeninitialisierer für "Microsoft.Data.SqlClient.TdsParser" hat eine Ausnahme verursacht.

Fehlermeldung:
Die DLL "Microsoft.Data.SqlClient.SNI.x86.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.

Fehlermeldung:
bei Microsoft.Data.SqlClient.TdsParser..ctor(Boolean MARS, Boolean fAsynchronous)
bei Microsoft.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
bei Microsoft.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
bei Microsoft.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, ServerCertificateValidationCallback serverCallback, ClientCertificateRetrievalCallback clientCallback, DbConnectionPool pool, String accessToken, SqlClientOriginalNetworkAddressInfo originalNetworkAddressInfo, Boolean applyTransientFaultHandling)
bei Microsoft.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
bei Microsoft.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
bei Microsoft.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
bei Microsoft.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
bei Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
bei Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) bei Microsoft.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
bei Microsoft.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions) bei Microsoft.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions)
bei Microsoft.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) bei Microsoft.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 retry, SqlConnectionOverrides overrides)
bei Microsoft.Data.SqlClient.SqlConnection.Open(SqlConnectionOverrides overrides)
bei Microsoft.Data.SqlClient.SqlConnection.Open()
bei Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
bei Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
bei Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
bei Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.InitializeReader(DbContext _, Boolean result) bei Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3 operation, Func3 verifySucceeded) bei Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.MoveNext()
bei System.Linq.Enumerable.Single[TSource](IEnumerable1 source) bei Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) bei Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression) bei System.Linq.Queryable.Single[TSource](IQueryable1 source)
bei .........RepWagen.cs: Zeile51

Die Meldung verstehe ich nicht...
Die Suche nach SNI.x86.dll hilft irgendwie auch nicht weiter...

Hat jemand ein Idee?

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 3 Jahren

Es hat sich erledigt.

16.806 Beiträge seit 2008
vor 3 Jahren

Wäre praktisch gewesen, wenn Du Dich mit den Breaking Changes von EF Core 3 beschäftigt hättest, bevor Du upgradest.

EFCore 3 arbeitet nicht mehr mit System.Data.SqlClient sondern mit Microsoft.Data.SqlClient.
Daher muss entsprechendes Paket ersetzt werden; dann ist auch der Fehler weg.

Tipp: beachte den Migrationspfad und die Empfehlungen.
Ist alles vom EF Team sauber dokumentiert 😉

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 3 Jahren

Wäre praktisch gewesen, wenn Du Dich mit den Breaking Changes von EF Core 3 beschäftigt hättest, bevor Du upgradest.

Ja-haaaa 😃

EFCore 3 arbeitet nicht mehr mit System.Data.SqlClient sondern mit Microsoft.Data.SqlClient.
Daher muss entsprechendes Paket ersetzt werden; dann ist auch der Fehler weg.

Ja.

Tipp: beachte den Migrationspfad und die Empfehlungen.
Ist alles vom EF Team sauber dokumentiert 😉

Yes.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 3 Jahren

Moin, ich hätte noch einen Nachschlag.

System.Data.SqlClient ist nicht mehr vorhanden, sondern Microsoft.Data.SqlClient.

Beim Ausführen (Debug) heißt es, dass die Anwendung nicht gestartet werden kann, aufgrund einer falschen Anwendungskonfiguration und ich solle doch mal in die Ereignisanzeige schauen.

Da steht dann:> Fehlermeldung:

Microsoft.Data.SqlClient.SNI.x64.dll
Zwei oder mehr, vom Anwendungsmanifest direkt oder indirekt referenzierte Komponenten beinhalten Dateien mit demselben Namen.

Grund dafür sind diese Einträge in der [Programmname].manifest:

<file name="Microsoft.Data.SqlClient.SNI.x64.dll" size="549256">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>FQwBjrY2O421eg/ESWk1/ek15S199tZ0MOq18dY4YNk=</dsig:DigestValue>
</hash>
</file>
<file name="Microsoft.Data.SqlClient.SNI.x64.dll" size="510840">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>Rmsqtz8i0rUFKcM4leepPhXDs28uU9XJJtOY6ooTTsM=</dsig:DigestValue>
</hash>
</file>
<file name="Microsoft.Data.SqlClient.SNI.x64.dll" size="549240">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>D/9ZSzuRrA2K0/QHaj0ZL+nr6gV3gJzpicX9cJB6Iwo=</dsig:DigestValue>
</hash>
</file>
<file name="Microsoft.Data.SqlClient.SNI.x86.dll" size="497024">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>Lu2OS1/HxJEtOVQdVh25zYLvDLjpJk17WnE+RHNoc2g=</dsig:DigestValue>
</hash>
</file>
<file name="Microsoft.Data.SqlClient.SNI.x86.dll" size="440696">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>fdxYToKw1/AzNQ/3sDJYl4OLmTgFp6nR1BP8QAMBquY=</dsig:DigestValue>
</hash>
</file>
<file name="Microsoft.Data.SqlClient.SNI.x86.dll" size="497016">
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>5OVK8KFhaRyp8M0T/MHr0A+dyH45VKfsrj13rMFVnkE=</dsig:DigestValue>
</hash>
</file>

Lösche ich alle Einträge bis auf einen:

Microsoft.Data.SqlClient.SNI.x64.dll

funktioniert alles.

Die Frage ist nun: Wie kommen diese Einträge (und so viele) in die Manifest Datei?

16.806 Beiträge seit 2008
vor 3 Jahren

Als Hinweis, da es in der Software-Welt viele Manifest-Dateien gibt:
schuppsl meint offenbar das Manifest, das von ClickOnce erstellt wird.