由于名称空间未知,关键字“使用”,运行转换失败

时间:2012-04-19 08:14:13

标签: c# entity-framework t4 edmx csdl

我想使用* .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'命名空间。确保命名空间正确或   指定了命名空间的模式。

     

运行转换:未知的命名空间或别名   (BooksModel.Extended)。

我加载了我的CSDL:

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

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

1 个答案:

答案 0 :(得分: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());