【问题标题】:No schema encountered with 'Base' namespace when running POCO entity generator with a CSDL file which imports a namespace from another CSDL file使用从另一个 CSDL 文件导入命名空间的 CSDL 文件运行 POCO 实体生成器时,没有遇到“基本”命名空间的模式
【发布时间】:2013-01-20 14:50:00
【问题描述】:

当使用从另一个 CSDL 文件导入命名空间的 CSDL 文件运行 POCO 实体生成器时,我收到此错误“没有遇到 'Base' 命名空间的架构”。

两个 CSDL 文件已移至项目文件夹外的不同文件夹中。这是因为我必须编辑 Administracion.csdl 文件才能从“Base”CSDL 文件中导入命名空间。

“Administracion.csdl”文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Administracion" Alias="Self" p1:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:p1="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
  <Using Namespace="Base"  Alias="Base" />
  <EntityContainer Name="AdministracionEntities" p1:LazyLoadingEnabled="true">
    <EntitySet Name="adm_accesoxperfil" EntityType="Administracion.adm_accesoxperfil" />
    <EntitySet Name="adm_accesoxusuario" EntityType="Administracion.adm_accesoxusuario" />
    <EntitySet Name="adm_accionxnivelseguridadxusuario" EntityType="Administracion.adm_accionxnivelseguridadxusuario" />
    <EntitySet Name="adm_alarmaxperiodopresupuesto" EntityType="Administracion.adm_alarmaxperiodopresupuesto" />
    <EntitySet Name="adm_categoriapredefinidaxbanner" EntityType="Administracion.adm_categoriapredefinidaxbanner" />
    <EntitySet Name="adm_configuraciondetallepresupuesto" EntityType="Administracion.adm_configuraciondetallepresupuesto" />
    <EntitySet Name="adm_configuracionperiodopresupuesto" EntityType="Administracion.adm_configuracionperiodopresupuesto" />
    <EntitySet Name="adm_confirmacionseguridadoperacion" EntityType="Administracion.adm_confirmacionseguridadoperacion" />
    <EntitySet Name="adm_cuenta" EntityType="Base.adm_cuenta" />
    <EntitySet Name="adm_cuentaxmetafinanciera" EntityType="Administracion.adm_cuentaxmetafinanciera" />

我编辑了 POCO 实体生成器模板来读取我编辑过的 CSDL 文件,而不是读取项目文件夹中的 EDMX 文件。

模板上的代码如下所示:

string csdl = @"path\Administracion.csdl";  
var ItemCollection = new EdmItemCollection(csdl);

运行模板时出现以下错误:

Error   1   Running transformation: System.Data.MetadataException: Schema specified is not valid. Errors: 
Administracion.csdl(3,4) : error 0160: No schema encountered with 'Base' namespace. Make sure the namespace is correct or the schema defining the namespace is specified.
Administracion.csdl(13,6) : error 0034: Unknown namespace or alias (Base). 

我做错了什么?是因为 CSDL 文件位于不同的文件夹中吗?我必须把它们放在哪里? POCO 实体生成器模板能否处理在 CSDL 文件上导入命名空间?

【问题讨论】:

    标签: entity-framework poco t4 edmx csdl


    【解决方案1】:

    错误背后的问题是我没有在 EdmItemCollection 中加载其他 CSDL 文件。解决方案是将带有必要 CSDL 文件(包括具有导入命名空间的文件)的路径的 String[] 加载到 EdmItemCollection。

    在代码中,它看起来像这样:

    List<string> lstCsdlPaths = new List<string>();
    lstCsdlPaths.Add(@"path\Base.csdl");
    lstCsdlPaths.Add(@"path\Administracion.csdl");
    var ItemCollection = new EdmItemCollection(lstCsdlPaths.ToArray()); 
    

    【讨论】:

      【解决方案2】:

      文件夹应该用'.'分隔。不是'/'。

      元数据的正确格式是:

      res:///DataLayer.myProject.myProject.csdl or res:///DataLayer.myProject.myProject.ssdl or res://*/DataLayer.myProject.myProject.msl

      【讨论】:

      • 感谢 Ariel,您的评论有助于找到问题的解决方案。
      猜你喜欢
      • 2022-12-10
      • 2018-01-05
      • 2012-11-14
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 2018-12-25
      相关资源
      最近更新 更多