实体框架ORA-00932:不一致的数据类型:“'预期CLOB获得CHAR”

时间:2017-11-07 22:03:06

标签: 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:不一致的数据类型:&#34;&#39;预计CLOB得到CHAR&#34;

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

PS:Same question in Russian.

更新

我应该出示MyEntity

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

2 个答案:

答案 0 :(得分:4)

如果你想在客户端上执行select(即加载所有MyEntity&#39;并在客户端上过滤它们),你可以这样做:

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

第一个ToList()从DB加载所有实体。 AsQueryable()允许您使用Expression函数。

我希望这会有所帮助。

干杯, 尼古拉

答案 1 :(得分:0)

不是在getselector()中返回一个对象,而是返回一个接口(在转换后)或具体类型。这应该有助于实体框架识别适当的数据类型。