gpt4 book ai didi

linq - 使用 odp.net 的 Oracle Entity Framework 不采用 linq 查询中的参数

转载 作者:行者123 更新时间:2023-12-04 08:52:35 26 4
gpt4 key购买 nike

我正在使用 odp.net 将 EntityFramework 与 Oracle 结合使用。参数化的 sql 查询不起作用。

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
);

有谁知道为什么?我在该 View 中有 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.

更新 2:
查询与 Devart 的 dotconnect 驱动程序一起使用。看起来这是 odp.net 的问题。

有人有类似的问题吗?

最佳答案

不确定您是否截断了示例,但如果您使用多个参数,这可能是问题所在:

Parameterized query in Oracle trouble

Although I can't see anything wrong with your example, I wonder if you're being hit by the old BindByName problem. By default, ODP.NET binds parameters to the query in the order in which they are added to the collection, rather than based on their name as you'd like. Try setting BindByName to true on your OracleCommand object and see if that fixes the problem.

关于linq - 使用 odp.net 的 Oracle Entity Framework 不采用 linq 查询中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17097243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com