Не удалось выполнить преобразование из-за неизвестного пространства имен с ключевым словом "using"

Я хотел бы использовать элемент "Using" в моем *.csdl, чтобы импортировать другое пространство имен, и использовать 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)

Однако, когда я использую шаблон (POCO) для преобразования моего CSDL, инструмент запуска выдает ошибку преобразования:

Выполнение преобразования: Схема имен с пространством имен BooksModel.Extended не обнаружена. Убедитесь, что пространство имен правильное или указана схема, определяющая пространство имен.

Выполнение преобразования: неизвестное пространство имен или псевдоним (BooksModel.Extended).

Я загружаю свой CSDL так:

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

Как я могу изменить шаблон, чтобы включить неизвестное пространство имен?

1 ответ

Проблема, связанная с ошибкой, заключается в том, что вы не загружаете другие файлы CSDL в коллекцию EdmItemCollection. Решение состоит в том, чтобы загрузить String[] с путями необходимых файлов CSDL (включая файлы с импортированными пространствами имен) в коллекцию EdmItemCollection.

В коде это выглядит так:

List<string> lstCsdlPaths = new List<string>();
lstCsdlPaths.Add(@"path\CSDLBase.csdl");
lstCsdlPaths.Add(@"path\CSDLImports.csdl");
var ItemCollection = new EdmItemCollection(lstCsdlPaths.ToArray()); 
Другие вопросы по тегам