5

我有一些 EF/LINQ 语句需要不区分大小写的文本搜索,但我们的 oracle 数据库区分大小写。如何在连接/命令级别执行必要的 ALTER SESSION 语句,以便影响后续的相同上下文调用?

我认为我需要运行的命令(OTN 线程

ALTER SESSION SET NLS_SORT=BINARY_CI

我知道Database.ExecuteSqlCommandDatabase.Connection.CreateCommand作为方法,但我不知道“何时”。如果我在创建之后但在 LINQ 之前手动尝试对上下文执行此操作,我必须手动打开和关闭连接,然后它似乎是与 LINQ 不同的事务,并且似乎没有应用。

4

2 回答 2

1

从技术上讲,这不是您如何注入ALTER SESSION SET NLS_SORT=BINARY_CI查询的问题的解决方案,但它可以帮助您进行不敏感的大小写搜索,只需使用.ToLower().

于 2014-04-15T19:31:17.913 回答
0

第一个选项是要求 DBA 将“登录触发器”添加到您正在使用的 DB 帐户。缺点有两点:一是会为每个命令设置,二是 DBA 会嘲笑你没有简单地在所有事情上都执行 oracle 事实上的“上级”操作。

这些家伙似乎使用 ExecuteStoreCommand 脱离了上下文。我不是 EF 的粉丝,所以我在这里帮不上什么忙,但我猜你需要在同一个上下文中执行你的 linq 查询? http://blogs.planetsoftware.com.au/paul/archive/2012/07/31/ef4-part-10-database-agnostic-linq-to-entities-part-2.aspx

您可以在 EF 的命令拦截功能中使用“执行”方法之一:http: //msdn.microsoft.com/en-us/data/dn469464#BuildingBlocks

于 2014-03-19T15:14:45.410 回答