8

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中,并且执行Selectthrow 下一个异常。

ORA-00932: 不一致的数据类型: "'expected CLOB got CHAR"

我的班级需要得到ExpressionGetSelector()重要的。如何克服错误或绕过它?绕过的一种方法是强制 EFSelect在客户端上执行。怎么做?

PS:同样的问题在俄语中。

更新

我应该展示 MyEntity

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

2 回答 2

5

如果您想在客户端执行选择(即加载所有 MyEntity 并在客户端过滤它们),您可以执行以下操作:

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

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

我希望这有帮助。

干杯,尼古拉

于 2017-11-10T15:59:10.157 回答
0

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

于 2017-11-11T18:22:23.923 回答