3

現在、次のようなコード優先モデルがあります。

public class Ticket
{
    public int SERIAL_NO { get; set; }
    public DateTime SUBMIT_DATE { get; set; }
    public string SYNOPSIS { get; set; }
    public string DESCRIPTION { get; set; } // This is really an Oracle CLOB in the DB
}

チケット コントローラーでは、ユーザーが [送信] をクリックすると、次のようにデータベースから最大の SERIAL_NO を選択します。

var lastSerial = db.Tickets.Select(x => x.SERIAL_NO).Max();

次のエラーがスローされます。

ORA-00932: inconsistent datatypes: expected - got NCLOB

誰にもアイデアはありますか?前もって感謝します!

4

4 に答える 4

1

ODP.NET の最新リリース (この記事の執筆時点) は 11.2.0.3 です。

残念ながら、このバージョンはまだ Code First をサポートしていません (参考として、Oracle® Data Provider for .NET 開発者ガイドを参照してください)。

エンティティ フレームワーク 4.1 がサポートされています。ただし、Entity Framework 4.1 の一部である Code First 機能は現在サポートされていません。

支払う意思がある場合、DevArt はプロバイダーが Code-First をサポートしていると主張しています。彼らは無料の試用版を提供しているので、それをチェックすることができます.

もう 1 つのオプションは、EDM Designer を使用してコードを生成することです。

于 2012-04-04T12:54:17.770 に答える
1

クエリの元の問題 (ORA-00932 エラーが発生する) は、SELECT リストに大きな (CLOB などの) データ型のフィールドが含まれている場合、DISTINCT を使用できないためです。生成された SQL に DISTINCT 句が含まれていて、DESCRIPTION フィールドが返されていますか?

CLOB には GB のデータが含まれる可能性があり、その個別の列のみを返すことは、個々の列の GB を結果セット内の GB または他のすべての列と比較することを意味する可能性があると考えられます。

同じ理由で、他の集計関数 (min、max) も失敗し、order by で CLOB 列を使用することもあると思います。これは古い質問であり、私が提供したヒントは通常、ほとんどのコーダーの「頭を悩ませる」ことを解決するため、SQL リファレンスで関連する箇所を調べません。詳細が必要な人は、どこを見ればよいか (または何を探せばよいか) がわかります。

于 2013-01-09T18:32:46.470 に答える
1

列のマッピングで

.HasColumnType("CLOB")
于 2019-08-15T14:02:09.923 に答える
0

モデルに、属性 [StringLength(100)] を追加します

于 2016-03-31T14:09:32.307 に答える