我有一些EF / LINQ语句需要不区分大小写的文本搜索,但我们的oracle数据库区分大小写。如何在连接/命令级别执行必要的ALTER SESSION语句,以便它将影响后续的同一上下文调用?
命令我想我需要运行(OTN Thread)
ALTER SESSION SET NLS_SORT=BINARY_CI
我知道Database.ExecuteSqlCommand和Database.Connection.CreateCommand都是方法,但我无法弄清楚'何时'。如果我在创建之后但在LINQ之前手动尝试对上下文执行此操作,则必须手动打开&关闭连接,然后它似乎是一个与LINQ不同的事务,并且似乎没有应用。
答案 0 :(得分:1)
从技术上讲,这不是解决如何将ALTER SESSION SET NLS_SORT=BINARY_CI
注入查询的问题的解决方案,但它可以帮助您进行不敏感的案例搜索,只需使用.ToLower()
。
答案 1 :(得分:0)
第一个选项是要求DBA向您正在使用的数据库帐户添加“登录触发器”。缺点有两个:一个是为每个命令设置的,两个DBA会嘲笑你,因为不是简单地在所有事情上做oracle defacto“upper”。
这些家伙似乎在上下文中使用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