LINQ to Entities で引用符をエスケープする方法を知りたいです。
これが私の環境です。Silverlight 5 と WCF RIA サービスを備えた Entity Framework 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を使用して同じことを行います。
重要な注意%
:や二重引用符などの文字を使用しても例外は発生しません"
。また、次のように演算子がequal strictの場合、単純な引用符で例外を発生させません。
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 : 問題は、EF 用の MySQL プロバイダーの最新バージョンで解決されています。