質問

ストアタイプ(テーブルまたはビュー)に基づいてエンティティをフィルタリングしようとしています。

テストプロジェクトに2つのエンティティがあり、一方のソースはテーブルで、もう一方のソースはビューです。

<EntitySet Name="Test" EntityType="TestModel.Store.Test" store:Type="Tables" Schema="dbo" />
<EntitySet Name="TestView" EntityType="TestModel.Store.TestView" store:Type="Views" store:Schema="dbo" store:Name="TestView">

上記のコードサンプルは、モデルのedmxファイルの SSDL セクションから取得したものです。

SSDLの store:Type 情報は必要だと思いますが、エンティティフレームワークAPIを使用してその値を取得する方法が見つかりませんでした。

ご協力いただければ幸いです。

役に立ちましたか?

解決

SSpaceまたはStoreItemCollectionを調べることで、SSDLのメタデータを照会できます。

i.e。

var sspaceEntitySets = context.MetadataWorkspace
                       .GetItems<EntityContainer>(DataSpace.SSpace)
                       .First().BaseEntitySets.OfType<EntitySet>();
var entitySet = sspaceEntitySets.First();
var tableType = entitySet
.MetadataProperties["http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator:Type"]
.Value.ToString();

残念ながら、これはクラスをテーブルまたはビューのどちらから取得するかと結び付けるのに役立ちません。テーブルの形状を記述するエンティティ(つまり、SSpaceのもの)ではなく、エンティティ(つまり、CSpaceでコーディングするもの)がCSpaceにあり、エンティティがビューまたはテーブルから来ているかどうかを知るために必要です。マッピングを介してCSpace EntitySetからSSpace EntitySetに取得できるようにします。

残念ながら、EFはパブリックCSSPaceを公開していません(つまり、APIを使用してEDMXのMSLフラグメントを読み取る方法はありません)。

これを行うには、おそらくLINQ to XMLなどを使用して、MSL要素を手動で推論する必要があります。

これが役立つことを願って

アレックス

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top