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
。怎么做?
我应该出示MyEntity
CREATE TABLE MyEntity (ID NUMBER(10), Name VARCHAR2(100));
答案 0 :(得分:4)
如果你想在客户端上执行select(即加载所有MyEntity&#39;并在客户端上过滤它们),你可以这样做:
var result = db.MyEntity.ToList().AsQueryable().Select(getSelector()).ToList();
第一个ToList()从DB加载所有实体。 AsQueryable()允许您使用Expression函数。
我希望这会有所帮助。
干杯, 尼古拉
答案 1 :(得分:0)
不是在getselector()中返回一个对象,而是返回一个接口(在转换后)或具体类型。这应该有助于实体框架识别适当的数据类型。