由于命名空间未知,关键字为“using”,运行转换失败

本文关键字:using 运行 失败 转换 命名空间 未知 关键字 | 更新日期: 2023-09-27 18:31:48

我想在我的 *.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)

但是,当我使用模板 (POCO) 来转换我的 CSDL 时,运行工具会抛出转换错误:

运行转换:未遇到架构 "BooksModel.Extended"命名空间。确保命名空间正确或 指定定义命名空间的架构。

运行转换:未知命名空间或别名 (书籍模型扩展)。

我像这样加载我的 CSDL:

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

如何修改模板以包含未知命名空间?

由于命名空间未知,关键字为“using”,运行转换失败

错误背后的问题是您没有加载 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());