/// <summary> /// Construcotr /// </summary> /// <param name="reader">the XmlReader for current Edm doc</param> /// <param name="getReferencedModelReaderFunc">The function to load referenced model xml. If null, will stop loading the referenced model.</param> private EdmxReader(XmlReader reader, Func<Uri, XmlReader> getReferencedModelReaderFunc) { this.reader = reader; this.getReferencedModelReaderFunc = getReferencedModelReaderFunc; this.errors = new List<EdmError>(); this.edmReferences = new List<IEdmReference>(); this.csdlParser = new CsdlParser(); // Setup the edmx parser. this.edmxParserLookup = new Dictionary<string, Action> { { CsdlConstants.Element_DataServices, this.ParseDataServicesElement }, { CsdlConstants.Element_Reference, this.ParseReferenceElement }, { CsdlConstants.Element_Runtime, this.ParseRuntimeElement } }; this.dataServicesParserLookup = new Dictionary<string, Action> { { CsdlConstants.Element_Schema, this.ParseCsdlSchemaElement } }; this.runtimeParserLookup = new Dictionary<string, Action> { { CsdlConstants.Element_ConceptualModels, this.ParseConceptualModelsElement } }; this.conceptualModelsParserLookup = new Dictionary<string, Action> { { CsdlConstants.Element_Schema, this.ParseCsdlSchemaElement } }; }
public static bool TryParse(IEnumerable <XmlReader> csdlReaders, out CsdlModel entityModel, out IEnumerable <EdmError> errors) { EdmUtil.CheckArgumentNull(csdlReaders, "csdlReaders"); CsdlParser parser = new CsdlParser(); int readerCount = 0; foreach (var inputReader in csdlReaders) { if (inputReader != null) { try { parser.AddReader(inputReader); } catch (XmlException e) { entityModel = null; errors = new EdmError[] { new EdmError(new CsdlLocation(e.LineNumber, e.LinePosition), EdmErrorCode.XmlError, e.Message) }; return(false); } } else { entityModel = null; errors = new EdmError[] { new EdmError(null, EdmErrorCode.NullXmlReader, Edm.Strings.CsdlParser_NullXmlReader) }; return(false); } readerCount++; } if (readerCount == 0) { entityModel = null; errors = new EdmError[] { new EdmError(null, EdmErrorCode.NoReadersProvided, Edm.Strings.CsdlParser_NoReadersProvided) }; return(false); } bool success = parser.GetResult(out entityModel, out errors); if (!success) { entityModel = null; } return(success); }
public static bool TryParse(IEnumerable<XmlReader> csdlReaders, out CsdlModel entityModel, out IEnumerable<EdmError> errors) { EdmUtil.CheckArgumentNull(csdlReaders, "csdlReaders"); CsdlParser parser = new CsdlParser(); int readerCount = 0; foreach (var inputReader in csdlReaders) { if (inputReader != null) { try { parser.AddReader(inputReader); } catch (XmlException e) { entityModel = null; errors = new EdmError[] { new EdmError(new CsdlLocation(e.LineNumber, e.LinePosition), EdmErrorCode.XmlError, e.Message) }; return false; } } else { entityModel = null; errors = new EdmError[] { new EdmError(null, EdmErrorCode.NullXmlReader, Edm.Strings.CsdlParser_NullXmlReader) }; return false; } readerCount++; } if (readerCount == 0) { entityModel = null; errors = new EdmError[] { new EdmError(null, EdmErrorCode.NoReadersProvided, Edm.Strings.CsdlParser_NoReadersProvided) }; return false; } bool success = parser.GetResult(out entityModel, out errors); if (!success) { entityModel = null; } return success; }