4

*.csdl で "Using" 要素を使用して他の名前空間をインポートし、POCO を使用してオブジェクトを変換したいと考えています。

私は次のような CSDL を使用します。

<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm"
          xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration"
          xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
          Namespace="BooksModel" Alias="Self">

    <Using Namespace="BooksModel.Extended" Alias="BMExt" />

    <EntityContainer Name="BooksContainer" >
      <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
    </EntityContainer>

    <EntityType Name="Publisher">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" />
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="BMExt.Address" Name="Address" Nullable="false" />
    </EntityType>

</Schema>

(http://msdn.microsoft.com/en-us/library/bb738545.aspx)

ただし、CSDL を変換するためにテンプレート (POCO) を使用すると、実行ツールは変換エラーをスローします。

実行中の変換:「BooksModel.Extended」名前空間でスキーマが見つかりません。名前空間が正しいこと、または名前空間を定義するスキーマが指定されていることを確認してください。

実行中の変換: 不明な名前空間またはエイリアス (BooksModel.Extended)。

次のように CSDL をロードします。

var inputFile = @"CSDL_NAME.csdl";
var ItemCollection = loader.CreateEdmItemCollection(inputFile);

不明な名前空間を含めるためにテンプレートを変更するにはどうすればよいですか?

4

1 に答える 1

2

エラーの背後にある問題は、EdmItemCollection に他の CSDL ファイルを読み込んでいないことです。解決策は、必要な CSDL ファイル (インポートされた名前空間を持つファイルを含む) のパスを含む String[] を EdmItemCollection にロードすることです。

コードでは、次のようになります。

List<string> lstCsdlPaths = new List<string>();
lstCsdlPaths.Add(@"path\CSDLBase.csdl");
lstCsdlPaths.Add(@"path\CSDLImports.csdl");
var ItemCollection = new EdmItemCollection(lstCsdlPaths.ToArray()); 
于 2013-02-06T19:16:10.147 に答える