質問: 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つ以外の列を持たないこのようなテーブルに遭遇すると、マッピングテーブルはエンティティの代わりに多対多関連として概念スキーマで表されます。 > >