首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架6- ORA-00932在加入ToString时

实体框架6- ORA-00932在加入ToString时
EN

Stack Overflow用户
提问于 2018-06-25 06:47:00
回答 1查看 1.3K关注 0票数 2

我正在用oracle数据库测试EntityFramework6.2,但是在尝试在多个条件下进行转换时会遇到问题。

我需要将TABLE2_ID (NUMBER)TABLE2.ID (VARCHAR2)匹配,后者是不同的值类型。问题是,ToString()方法将转换为TO_NCLOB,而不是工作的TO_NCHAR

代码语言:javascript
复制
var query = from table1 in context.TABLE1
            join table2 in context.TABLE2 on table1.TABLE2_ID.ToString() equals table2.ID
            select  new
            {
                table1.NAME,
                table2.TEXT
            };

生成的SQL如下所示:

代码语言:javascript
复制
SELECT 
1 AS "C1", 
"Extent1"."NAME" AS "NAME", 
"Extent2"."TEXT" AS "TEXT"
FROM  "USER"."TABLE1" "Extent1"
INNER JOIN "USER"."TABLE2" "Extent2" ON 
  (CASE WHEN ("Extent1"."TABLE2_ID" IS NULL) THEN N'' 

   // At this point I need TO_NCHAR
   ELSE TO_NCLOB("Extent1"."TABLE2_ID") END) = "Extent2"."ID"

这导致:

ORA-00932:不一致的数据类型:预期NCHAR获得NCLOB

我知道有许多问题有几乎相同的例外,但只有不同的用例,所以请看我如何解决这个问题。

例如,是否有一种方法可以覆盖ToString() SQL转换?

主要问题: LINQ .ToString()转换为TO_NCLOB,但我需要TO_NCHAR或其他解决方案。

我将Visual 2017Oracle开发工具一起用于VS2017 12.2.0.11

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-05 07:06:47

遗憾的是,.ToString()在中没有很好地实现。所以我找到了这个SO question accepted answer的解决办法。安装EntityFramework.Functions Nuget包并使用内置于TO_NCHAR函数的TO_NCHAR完成了以下工作:

代码语言:javascript
复制
public static class OracleFunctions
{
    [Function(FunctionType.BuiltInFunction, "TO_NCHAR")]
    public static string ToNChar(this string value) => Function.CallNotSupported<string>();
}

用OnModelCreating重写DbContext:

代码语言:javascript
复制
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}

然后我就可以像这样使用它,它工作得完美无缺:

代码语言:javascript
复制
var query = from table1 in context.TABLE1
            join table2 in context.TABLE2 on table1.TABLE2_ID.ToNChar() equals table2.ID
            select  new
            {
                table1.NAME,
                table2.TEXT
            };
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51017685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档