2

テーブルとビューの両方をインポートした EDMX があります。T4 スクリプトでは、これらは 経由で検出されforeach( EntitySet set in container.BaseEntitySets.OfType<EntitySet>( ) )ます。

「コンテナ」の語源はforeach (EntityContainer container in GetSourceSchemaTypes<EntityContainer>()).

テーブルかビューかを判断するために使用できる EntitySet のプロパティが見つかりませんでした。どうすればわかりますか?

4

1 に答える 1

1

容器にもよります。EntityContainerCSpace (CSDL) と SSpace (SSDL) の両方のマッピング メタデータに使用できる一般的なクラスです。CSpace はクラス モデル (デザイナーに表示されるもの) を記述し、SSpace はテーブル モデル (データベースにあるもの) を記述します。これら 2 つの間には、CSpace から SSpace へのマッピングを記述する CSSpace (MSL) があります。

ジェネレータごとに異なるスペースが使用されます。クラス ジェネレーターは、CSpace で定義されているエンティティと同じクラスを作成する必要があるため、CSpace を使用します。SQL ジェネレーターは、SSpace の正しいオブジェクトを使用して SQL を作成する必要があるため、SSpace を使用します。CSSpace がコード生成に使用されることはなく、その実装のほぼ全体が公開されていません。

ビューに関する情報は の SSpace に保存されEntitySetますMetadataProperties。クラスを生成するために CSpace で作業している場合、CSpace のエンティティにはそのストレージに関する知識がないため、この情報にアクセスできません。CSSpace の API は公開されていないため、エンティティの名前をテーブルの名前に変換するための命名規則 (またはハードコードされたソリューション) を使用しないと、CSpace スペースから SSpace に移動することも非常に困難です。

于 2012-05-26T15:09:20.120 に答える