我想知道如何在 LINQ to Entity 中转义引号。
这是我的环境:带有 Silverlight 5 和 WCF RIA 服务的实体框架 5、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),它总是会引发异常。
使用带有DomainDataSource的FilterDescriptor也是如此。
重要提示:它不会引发任何异常字符,如%
或双引号"
。此外,如果运算符等于严格,如下所示,它不会用简单的引号引发任何异常。
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 注入?我是否必须编写数十行代码来管理过滤器?
编辑:问题在 EF 的 MySQL 提供程序的最新版本中得到解决。