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、 を実行するとSelect次の例外がスローされるためです。

ORA-00932: 一貫性のないデータ型: "'expected CLOB got CHAR"

私のクラスはオーバーライドを取得Expressionする必要があります。GetSelector()エラーを克服する方法、または回避する方法は? Select回避する 1 つの方法は、クライアントでEF を強制的に実行することです。どうやってするの?

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() は、DB からすべてのエンティティをロードします。AsQueryable() を使用すると、Expression 関数を使用できます。

これが役立つことを願っています。

乾杯、ニコラ

于 2017-11-10T15:59:10.157 に答える