Jon*_*nna 8 linq entity-framework odp.net
我使用odp.net在Oracle中使用EntityFramework.参数化的sql查询不起作用.
var orderCode = "XYZ";
var set = ctx.Database.SqlQuery<Order>(
"Select * from dwh.Orders where OrderCode = '{0}'"
, orderCode
);
Run Code Online (Sandbox Code Playgroud)
(要么)
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
Run Code Online (Sandbox Code Playgroud)
但是,如果我有硬编码值,它就可以了.
var set = ctx.Database.SqlQuery<Order>(
"Select * from dwh.Orders where OrderCode = 'XYZ'",
orderCode
);
Run Code Online (Sandbox Code Playgroud)
有人知道为什么吗?我在该视图中有150列.那是问题吗?
更新: 使用Oracle参数的查询有效.问题是我在:param变量周围有单引号.
话虽如此,带有"{0}"的热门查询不起作用.此外,以下linq查询不起作用.
var set = ctx.Orders.Where(a => a.OrderCode == orderCode); // Gets zero results.
Run Code Online (Sandbox Code Playgroud)
当我对值进行硬编码时,它可以正常工作并获取结果.
var set = ctx.Orders.Where(a => a.OrderCode == "XYZ"); // Gets the results correctly.
Run Code Online (Sandbox Code Playgroud)
更新2: 查询使用Devart的dotconnect驱动程序.看起来这是odp.net的问题.
有人有类似的问题吗?
不确定您是否截断了示例,但如果您使用多个参数,这可能是问题所在:
尽管我看不出您的示例有任何问题,但我想知道您是否遇到了旧的 BindByName 问题。默认情况下,ODP.NET 按照参数添加到集合的顺序将参数绑定到查询,而不是根据您想要的名称。尝试在 OracleCommand 对象上将 BindByName 设置为 true 并查看是否可以解决问题。
| 归档时间: |
|
| 查看次数: |
2648 次 |
| 最近记录: |