Coldairarrow / EFCore.Sharding

Database Sharding For EFCore
Apache License 2.0
694 stars 144 forks source link

InvalidCastException when update with where in #64

Closed 11038215 closed 3 years ago

11038215 commented 3 years ago

Description An InvalidCastExpression is thrown when using UpdateSql with WHERE IN. For example:

var list = _repository.GetIQueryable<>(Poster).Where(x => postIds.Contains(x.Id)).ToListAsync(); // No problem

_repository.UpdateSql(x => postIds.Contains(x.Id),(("Name",UpdateType.Equal,"小明"));

Exception If you are seeing an exception, include the full exceptions details (message and stack trace). Unable to cast object of type 'Microsoft.EntityFrameworkCore.Query.SqlExpressions.SqlParameterExpression' to type 'Microsoft.EntityFrameworkCore.Query.SqlExpressions.SqlConstantExpression'. at Microsoft.EntityFrameworkCore.Query.QuerySqlGenerator.VisitIn(InExpression inExpression) at Microsoft.EntityFrameworkCore.Query.SqlExpressionVisitor.VisitExtension(Expression extensionExpression) at Pomelo.EntityFrameworkCore.MySql.Query.ExpressionVisitors.Internal.MySqlQuerySqlGenerator.VisitExtension(Expression extensionExpression) at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor) at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.QuerySqlGenerator.VisitSqlBinary(SqlBinaryExpression sqlBinaryExpression) at Pomelo.EntityFrameworkCore.MySql.Query.ExpressionVisitors.Internal.MySqlQuerySqlGenerator.VisitSqlBinary(SqlBinaryExpression sqlBinaryExpression) at Microsoft.EntityFrameworkCore.Query.SqlExpressionVisitor.VisitExtension(Expression extensionExpression) at Pomelo.EntityFrameworkCore.MySql.Query.ExpressionVisitors.Internal.MySqlQuerySqlGenerator.VisitExtension(Expression extensionExpression) at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor) at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node) at Microsoft.EntityFrameworkCore.Query.QuerySqlGenerator.VisitSelect(SelectExpression selectExpression) at Microsoft.EntityFrameworkCore.Query.QuerySqlGenerator.GetCommand(SelectExpression selectExpression) at EFCore.Sharding.Extention.ToSql(IQueryable query) in

Database Provider: MySql

Coldairarrow commented 3 years ago

UpdateSql And DeleteSql Can Not Use Contains

Coldairarrow commented 3 years ago

just support simple like = > < &&

Coldairarrow commented 3 years ago

Duplicate of #67

Coldairarrow commented 3 years ago

5.0已支持