Мне интересно, как избежать кавычек в LINQ to Entities.Quotes escape in Where в LINQ to Entites
Это моя среда: Entity Framework 5 с Silverlight 5 и WCF RIA Services, MySQL 5.6 и MySQLConnector 6.5.6.
У меня есть следующий запрос:
DomainContext.Load<Product>(DomainContext.GetProductQuery()
.Where<Product>(p => p.name.Contains(parameter))
.Take<Product>(30));
Если переменная параметр содержит цитату '
это вызывает исключение ошибок синтаксиса MySQL. Независимо от метода (StartWith, Contains) он всегда вызывает исключение.
Это делает то же самое, используя FilterDescriptor с DomainDataSource.
Важное примечание: Это не вызывает каких-либо исключений с символами как %
или двойные кавычки "
. Также он не вызывает никаких исключений с простой цитатой, если оператор равен строгим следующим образом.
DomainDataSource.FilterDescriptors.Add(new FilterDescriptor("productName", FilterOperator.IsEqualTo, SelectedProductName));
или
DomainContext.Load<Product>(DomainContext.GetProductQuery()
.Where<Product>(p == parameter)
.Take<Product>(30));
У меня нет никаких трудностей для вставки данных.
Любая помощь будет очень признательна. Спасибо.
Обновление: Я забыл упомянуть некоторые вещи.
Это мой метод со стороны обслуживания.
public IQueryable<Product> GetProduct()
{
return this.ObjectContext.product;
}
Как я могу защитить это от инъекций SQL? Должен ли я писать десятки строк кода для управления фильтрами?
EDIT: Проблема решена в последней версии поставщика MySQL для EF.
Вы уверены, что ** вам нужно ** так много ** текста ** жирным шрифтом **? Пожалуйста ** рассмотрите ** редактировать, чтобы уменьшить количество ** выделенного ** текста. – abatishchev
Я использую жирный текст, чтобы сфокусироваться на ключевых словах. Поэтому я думаю, что да, мне это нужно. – Frank