odp.netを使用してOracleでEntityFrameworkを使用しています。パラメータ化されたSQLクエリは機能しません。Entity Frameworkでodp.netを使用して、linqクエリでパラメータを取らない
var orderCode = "XYZ";
var set = ctx.Database.SqlQuery<Order>(
"Select * from dwh.Orders where OrderCode = '{0}'"
, orderCode
);
(または)
var set1 = ctx.Database.SqlQuery<Order>(
"Select * from dwh.Orders where OrderCode = ':param'",
new OracleParameter("param", orderCode)
);
Console.WriteLine(set.Count() + ", " + set1.Count()); //Gives 0, 0
私はハードコードに値を持っている場合は、それが動作します。
var set = ctx.Database.SqlQuery<Order>(
"Select * from dwh.Orders where OrderCode = 'XYZ'",
orderCode
);
誰に知っているのですか?私はその視点で150の列を持っています。問題ありますか?
更新: Oracleパラメータによるクエリが機能します。問題は、:param変数の前後に一重引用符があることです。
言われているように、 '{0}'を含む最上位のクエリは機能しません。また、次のlinqクエリは機能しません。
var set = ctx.Orders.Where(a => a.OrderCode == orderCode); // Gets zero results.
値をハードコードすると正しく動作し、結果をフェッチします。
var set = ctx.Orders.Where(a => a.OrderCode == "XYZ"); // Gets the results correctly.
UPDATE 2: クエリはDevartからキ繝ァ繝ヨドライバで動作します。これはodp.netの問題であるように見えます。
誰でも同様の問題がありますか?あなたはあなたの例を切り捨てていますが、複数のパラメータを使用している場合、これは問題になる可能性がある場合
"うまくいかない"と説明できますか?あなたは例外、空の結果、または間違った結果を得ていますか? –
'a.OrderCode.Equals(orderCode) 'を使用すると動作しますか –
.Equalsも機能しません。 – Jonna