Ho un problema con il metodo Contains()
con parametro proveniente dagli argomenti del metodo.
sto usando l'entità framework core 1.1 e il connettore mysql versione 6.10.0-alpha.
ho questo codice:
public IEnumerable<Message> search(string content) {
var bla = this.appDbContext.Messages.Where(x => x.Content.Contains("edit")).ToList();
var bla1 = this.appDbContext.Messages.Where(x => x.Content=="edit").ToList();
var bla2 = this.appDbContext.Messages.Where(x => x.Content==content).ToList();
var bla3 = this.appDbContext.Messages.Where(x => x.Content.Contains(content)).ToList();
...
le prime 3 linee funzionano,
tuttavia, la quarta riga (bla3) restituisce il seguente errore:
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware [0] Si è verificata un'eccezione non gestita durante l'esecuzione della richiesta System.InvalidOperationException: quando chiamato da 'VisitChildren', riscrivendo un nodo di tipo 'System.Linq.Expressions.Expression' deve restituire un non -Nullo valore dello stesso tipo. In alternativa, ignora "VisitChildren" e cambialo per non visitare i bambini di questo tipo.
a System.Linq.Expressions.ExpressionVisitor.VisitAndConvert [T] (ReadOnlyCollection'1 nodi, String callerName) in Microsoft.EntityFrameworkCore.Query.Expressions.SqlFunctionExpression.VisitChildren (visitatore ExpressionVisitor) in Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitExtension (Nodo espressione) in Microsoft.EntityFrameworkCore.Query.Expressions.SqlFunctionExpression.Accept (visitatore ExpressionVisitor) in Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ConditionalRemovingExpressionVisitor.Visit (nodo Expression) in Microsoft.EntityFrameworkCore.Query.Expressions.LikeExpression.VisitChildren (Visitatore ExpressionVisitor) in Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.ExpressionVisitorBase.VisitExtension (Nodo espressione) in Microsoft.EntityFrameworkCore.Query.Expressions.LikeExpression.Accept (Visitatore ExpressionVisitor) in Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ConditionalRemovingExpressionVisitor.Visit ( Nodo espressione) in Microsoft.EntityFrameworkCore.Query.RelationalQueryModelVisitor.VisitWhereClause (WhereClause whereClause, QueryModel queryModel, indice Int32) su Remotion.Linq.QueryModelVisitorBase.VisitBodyClauses (ObservableCollection'1 bodyClauses, QueryModel queryModel) su Remotion.Linq.QueryModelVisitorBase.VisitQueryModel (QueryModel queryModel) in Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.VisitQueryModel (QueryModel queryModel) in Microsoft.EntityFrameworkCore.Query.RelationQuestModelVisitor.VisitQueryModel (QueryModel queryModel) in Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.CreateQueryExecutor [TResult] (QueryModel queryModel) --- Fine della traccia dello stack dalla posizione precedente in cui è stata generata un'eccezione ---
perché non posso usare il parametro dagli argomenti del metodo dentro l'espressione linq di Contains()
?
e cosa posso fare per essere in grado di usarlo?
bug ufficialmente risolto nella versione 6.10.1: https://www.nuget.org/packages/MySql.Data/6.10.1-beta
https://bugs.mysql.com/bug.php?id=84505
[9 feb 21:17] Christine Cole
Pubblicato dallo sviluppatore:
Risolto il rilascio imminente di MySQL Connector / NET 6.10.1, ed ecco la voce del log delle modifiche:
EF Core: l'utilizzo del metodo Contains in un'espressione con una variabile genera un'eccezione.
Grazie per il bug report.
ed ecco il post ufficiale di rilascio:
http://insidemysql.com/mysql-connectornet-6-10-1-beta-has-been-released/
Bug corretti
- EF Core: l'utilizzo del metodo Contains in un'espressione con una variabile genera un'eccezione. (Bug # 25394204, Bug # 84505)
a quanto pare questo è un vero bug e non qualcosa che non capisco nel modo in cui funziona il framework delle entità.
abbiamo iniziato a parlarne qui nella board di github di entity framework:
Generazione di query errata durante l'utilizzo di Contains inside where predicate. # 6687 https://github.com/aspnet/EntityFramework/issues/6687#issuecomment-272543460
e poi è stato indirizzato al forum mysql bugs:
Bug # 84505 Uso del metodo Contiene in expression con una variabile genera un'eccezione in EF Core http://bugs.mysql.com/bug.php?id=84505
e ad un nuovo numero dedicato nella scheda di github del framework di entità:
Query: possibile errore attorno alla funzione di rimozione condizionale di guest e sql # 7441 https://github.com/aspnet/EntityFramework/issues/7441
spero che questo sia risolto presto.