我在使用从另一个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文件上导入名称空间?
答案 0 :(得分:0)
文件夹应以'。'分隔。不是'/'。
元数据的正确格式为:
res:///DataLayer.myProject.myProject.csdl or
res:///DataLayer.myProject.myProject.ssdl or
res://*/DataLayer.myProject.myProject.msl
答案 1 :(得分:0)
错误背后的问题是我没有在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());