0

EDMXファイルからPOCOを生成するT4テンプレートを使用しています。

基盤となるすべてのエンティティには、独自のスキーマがあります。その答えは、EDMXからスキーマ名を抽出する方法を説明しています。

StoreItemCollection sic;
loader.TryCreateStoreItemCollection(inputFile, out sic);
EntityContainer sicEntityContainer = sic.GetItems<EntityContainer>().First();

EntitySet eset = sicEntityContainer.GetEntitySetByName(code.Escape(entity), true);
string schemaName = eset.MetadataProperties["Schema"].Value.ToString();

EDMXファイルの内容を見ると、各エンティティにスキーマ属性があることがわかります。

<EntitySet Name="Table_1"
           EntityType="TestModel.Store.Table_1"
           store:Type="Tables"
           Schema="Blubb" />

この時点で、何でも正常に機能し、スキーマ名を抽出できます。

そしてここに問題があります:

1か月または2か月後、Visual Studio 2010は、モデル内の新しいエンティティのスキーマ属性にストアと呼ばれるプレフィックスを追加します。

<EntitySet Name="Table_1"
           EntityType="TestModel.Store.Table_1"
           store:Type="Tables"
           store:Schema="Blubb" />

そのため、上部のリンクされた記事のロジックを使用してスキーマを抽出することはできません。

これらのプレフィックスはテキストエディタで手動で削除する必要があるため、何でも問題なく動作します。

私の質問:

  1. その理由は何ですか?
  2. store:Schemaのような名前空間で属性を読み取るにはどうすればよいですか?
4

2 に答える 2

1

「Type/Schema」の前に名前空間を付ける必要があります

すなわち:

 eset.MetadataProperties["http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator:Type"].Value.ToString(); 
 eset.MetadataProperties["http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator:Schema"].Value.ToString(); 
于 2012-07-24T08:19:21.360 に答える
0

これが役立つかどうかはわかりませんが、役立つ可能性があります。http://brewdawg.github.io/Tiraggo.Edmx/を参照て、NuGetからインストールできます。すべてのマッピング、列ごとの低レベルSQLデータ型など、edmxファイル内のすべてのメタデータを提供します。ページのサンプルを見ると、それがいかに簡単であるかがわかります。

于 2013-09-23T01:33:01.090 に答える