2

PIVOT クエリに基づいてビューを作成すると、すべてのビュー フィールドがビュー メタデータで NULLABLE になります。それらを NULLABLE にしない方法はありますか?

NOT NULL にする必要があるピボット フィールドで NVL 関数を使用していますが、それでも NULLABLE になります。

私はMS Entity Frameworkを使用していて、NOT NULLABLE列のないテーブルまたはビューに基づいてモデルを更新しないため、これは私にとって問題です。

4

4 に答える 4

1

@Miguel、「MS Entity Framework」はわかりませんが、その名前は、データの編集を目的としたフレームワークのように聞こえます。「エンティティ」は通常、そのデータを変更してデータベースに戻す準備として、データベース データのキャッシュを構築するために使用されます。これはあなたがやりたいことのようには見えません。

この質問を読み直して、ユーザーのためにオンザフライでビューを作成するために使用しているある種のピボットジェネレーターがあると思います。このため、エンティティ モデルを修正するつもりはありません。エンティティモデルはまったく必要ないと思います。

Entity Framework は、使用できる「主キー」またはその他の行レベルの識別子を見つけるために、NOT NULL 列を探している可能性があります。なぜこれらが必要なのですか?

  • 任意の行を更新するために使用できるキーを提供します
  • 結果セットをページ分割するためのキーを提供します
  • 結果セットのメモリ内フィルタリングをサポートするキーを提供する
  • 結果セットで動的ソート操作をサポートする

また、「エンティティ」コレクションを非常にうまく表示するある種の UI コントロールがあるので、そのコントロールを使用したいと思います。

コントロールは「エンティティ」を必要としない場合があります - そのインターフェースが何であるかを確認してください。おそらく、更新可能なエンティティではなく、生成できるエンティティまたはインターフェイスのスーパークラスがあります。それができれば、気の利いた UI コントロールでそれを表示でき、NULLABLE 列で壁にぶつかることはありません。

于 2013-01-29T16:24:00.150 に答える
0

これらのビューの多くを必要としない場合は、コード ファーストを使用できます。Scott Gu は、これを行う方法を示す優れた記事「既存のデータベースを使用したコード ファースト」を持っています。

これには、データベースにアクセスするための 2 つの方法が必要になる場合があります。

于 2013-02-01T10:53:25.520 に答える
0

Visual Studio (VS) でモデルを更新する必要があります。これは、すべての列にどのような型情報があるかを知らないためです。次に、ピボット テーブルのクエリでデータ型を指定する必要があります。たとえば、 to_number を使用して明示的な変換を指定します。VS でモデルを更新する場合は、たとえばマテリアライズド ビュー (明示的に定義されたデータ型) に基づいている必要があります。ピボット テーブルに基づいて明示的に定義されたデータ型を使用してマテリアライズド ビューを作成し (これには nvl 関数だけでなく、定義されたデータ型、文字列、数値などを含める必要があります)、モデルを更新してください。マテリアライズドビューのみ?いいえ、テーブルでも構いません(面倒ですが)。ピボットテーブルから直接できますか? 常に機能するとは限りません(あなたの場合のように)。重要 データ型を定義する必要があります。

于 2013-01-29T15:58:54.193 に答える
0

考えられる解決策の 1 つは、クエリの結果に基づいてその場で新しいテーブルを生成し、その後、このテーブルの制約を調整することです。動的 SQL が多すぎるため、この方法は好きではありません :)

もう 1 つの解決策は、事前に作成されたマテリアライズド ビューです。「ON PREBUILT TABLE句」については、こちら(Oracleドキュメント)をご覧ください。

于 2013-01-28T13:19:22.037 に答える