При работе с генератором сущностей POCO с файлом CSDL, который импортирует пространство имен из другого файла CSDL, не обнаружено никакой схемы с пространством имен Base.
Я получаю эту ошибку "Не обнаружено схемы с пространством имен"Base"" при запуске генератора сущностей POCO с файлом CSDL, который импортирует пространство имен из другого файла CSDL.
Оба CSDL-файла были перемещены в разные папки за пределами папки проекта. Это потому, что мне пришлось отредактировать файл Administracion.csdl, чтобы импортировать пространство имен из CSDL-файла "Base".
Файл "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?
2 ответа
Проблема была в том, что я не загружал другие файлы CSDL в коллекцию EdmItemCollection. Решением было загрузить String[] с путями необходимых CSDL-файлов (в том числе с импортированными пространствами имен) в коллекцию EdmItemCollection.
В коде это выглядит так:
List<string> lstCsdlPaths = new List<string>();
lstCsdlPaths.Add(@"path\Base.csdl");
lstCsdlPaths.Add(@"path\Administracion.csdl");
var ItemCollection = new EdmItemCollection(lstCsdlPaths.ToArray());
Папки должны быть разделены знаком "." не '/'.
Правильный формат для метаданных:
res:///DataLayer.myProject.myProject.csdl or
res:///DataLayer.myProject.myProject.ssdl or
res://*/DataLayer.myProject.myProject.msl