Entity Framework ORA-00932:数据类型不一致:“'expected CLOB got CHAR”
Entity Framework ORA-00932: inconsistent datatypes: “'expected CLOB got CHAR”
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 需要 Expression
覆盖 GetSelector()
。
如何克服错误或绕过它?一种绕过的方法是强制 EF 在客户端上执行 Select
。怎么做?
更新
我应该展示 MyEntity
CREATE TABLE MyEntity (ID NUMBER(10), Name VARCHAR2(100));
如果你想在客户端执行 select(即加载所有 MyEntity 并在客户端过滤它们),你可以这样做:
var result = db.MyEntity.ToList().AsQueryable().Select(getSelector()).ToList();
第一个 ToList() 从数据库加载所有实体。 AsQueryable() 允许您使用表达式函数。
希望对您有所帮助。
干杯,
尼古拉
而不是 return 在 getselector() return 接口(转换后)或具体类型中创建对象。这应该有助于 entity framework 识别适当的数据类型。
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 需要 Expression
覆盖 GetSelector()
。
如何克服错误或绕过它?一种绕过的方法是强制 EF 在客户端上执行 Select
。怎么做?
更新
我应该展示 MyEntity
CREATE TABLE MyEntity (ID NUMBER(10), Name VARCHAR2(100));
如果你想在客户端执行 select(即加载所有 MyEntity 并在客户端过滤它们),你可以这样做:
var result = db.MyEntity.ToList().AsQueryable().Select(getSelector()).ToList();
第一个 ToList() 从数据库加载所有实体。 AsQueryable() 允许您使用表达式函数。
希望对您有所帮助。
干杯, 尼古拉
而不是 return 在 getselector() return 接口(转换后)或具体类型中创建对象。这应该有助于 entity framework 识别适当的数据类型。