SQL Serverのビューは主キーと外部キーを持つことができますか?

.net ado.net-entity-data-model database-design entity-framework sql-server

質問

Microsoft SQL Server Management Studioでデータベースビューの主キーと外部キーを定義することは可能ですか?どうやって?

ADO.NET Entity Data Modelを作成して、変更できない古い4つの整形式ではないデータベーステーブルから読み取るようにします。必要なデータだけのビューを作成しました。

4つのビューは、1対多の関係を持つ単純な3エンティティEDMXにマップする必要があります。

データモデルを作成するときにこのエラーが発生します。

テーブル/ビュー '...'には主キーが定義されていないため、有効な主キーを推測できませんでした。このテーブル/ビューは除外されました。エンティティを使用するには、スキーマを確認し、正しいキーを追加してコメントを外します。

それは2つのビューの主キーを正しく推論しました。しかし、他の2つではそうしませんでした。

私の問題のビューの一つは集約関数を使用しています:

SELECT MAX(...) ... GROUP BY ...

もう一方は、2つの外部キーの複合主キーを持つべきです。

人気のある回答

次のようにビューを定義する必要があります。

  • すべてのPRIMARY KEY列を含みます
  • JOIN使わない
  • 集約関数やUNION使用しません

ビューのどの行も、テーブルの1行に正確にマップする必要があります。

私の問題ビューの1つは集約関数を使用しています

更新することはできません。読み取り専用エンティティの場合は、 ここからの解決策になります

キーを推測できない場合は、対応するEntityType要素(Key要素なし)を含むコードコメントが.edmxファイルのSSDLセクションに追加されます。

あなたの場合は、読み取り専用のエンティティが欲しいと思われるので、次のことができます。

  1. SSDLエンティティのコメントを外します
    • 1つまたはいくつかのプロパティをNullable = "False"としてマークする
    • 適切なKey要素を追加する
    • 対応する定義クエリを追加してください。

2番目の質問

もう一方は2つの外部キーの複合主キーを持つべきです

ドキュメントから:

データベース内の2つのテーブル間の多対多の関係を表すテーブルは、概念スキーマ内に同等のエンティティを持たない場合があります。 EDMツールが外部キーである2つ以外の列を持たないこのようなテーブルに遭遇すると、マッピングテーブルはエンティティの代わりに多対多関連として概念スキーマで表されます。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ