c# - Entity Framework ORA-00932 : inconsistent datatypes: “' expected CLOB got CHAR”

标签 c# oracle entity-framework clob oracle-manageddataaccess

Oracle.ManagedDataAccess.EntityFramework 6.122.1.0 库用于从 MVC ASP.Net 应用程序访问 Oracle 数据库。它是截至 2017 年 11 月 14 日来自 NuGet 的最新库版本

protected override Expression<Func<MyEntity, object>> getSelector()
{   
    return m => new
    {
        ID = m.ID,
        NAME = m.Name,
        LONGSTRING = "Blah-blah-blah-blah...some thousands characters..." + 
                      m.ID + "blah-blah...blah" 
    };
}

protected override ProblemMethod()
{
    var result = db.MyEntity.Select(getSelector()).ToList();
}

有问题。发生这种情况是因为非常长的字符串(数千个字符)被连接到 LONGSTRING 中,并且 Select 的执行会抛出下一个异常。

ORA-00932: inconsistent datatypes: "'expected CLOB got CHAR"

我的类(class)需要使用 GetSelector() 覆盖获取 Expression。 如何克服错误或绕过它?一种绕过的方法是强制 EF 在客户端上执行 Select。怎么做?

附言:Same question in Russian.

更新

我应该展示 MyEntity

 CREATE TABLE MyEntity (ID NUMBER(10), Name VARCHAR2(100));

最佳答案

如果你想在客户端执行选择(即加载所有 MyEntity 并在客户端过滤它们),你可以这样做:

var result = db.MyEntity.ToList().AsQueryable().Select(getSelector()).ToList();

第一个 ToList() 从数据库中加载所有实体。 AsQueryable() 允许您使用表达式函数。

希望对您有所帮助。

干杯, 尼古拉

关于c# - Entity Framework ORA-00932 : inconsistent datatypes: “' expected CLOB got CHAR”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168183/

相关文章:

entity-framework - 使用无参数构造函数记录?

sql - Oracle "(+)"运算符

sql - ORACLE中的 sleep 功能

c# - DirectoryEntry.Invoke ChangePassword 上的 Active Directory 访问被拒绝异常

c# - 使用错误提供程序处理多个错误

mysql - 将 Oracle sql 查询转换为 mysql

c# - 关于 orderby 和 null 集合的 LINQ to Entities 问题

c# - EF 转换问题

c# - 嵌套的 json 对象不使用 Json.NET 更新/继承

c# - Web API 2 中的 ExceptionFilter 与 ExceptionLogger 与 ExceptionHandler