public OdcmModel GenerateOdcmModel()

in src/Readers/Vipr.Reader.OData.v4/OdcmReader.cs [81:125]


            public OdcmModel GenerateOdcmModel(IEnumerable<TextFile> serviceMetadata)
            {
                Logger.Info("Generating OdcmModel");

                if (serviceMetadata == null)
                    throw new ArgumentNullException("serviceMetadata");

                var edmxFile = serviceMetadata.FirstOrDefault(f => f.RelativePath == MetadataKey);

                if (edmxFile == null)
                    throw new ArgumentException(
                        String.Format("Argument must contain file with RelativePath \"{0}", MetadataKey),
                        "serviceMetadata");

                var edmx = XElement.Parse(edmxFile.Contents);

                IEnumerable<EdmError> errors;

                if (!CsdlReader.TryParse(edmx.CreateReader(ReaderOptions.None), /*_capabilitiesModel,*/ out _edmModel, out errors))
                {
                    Debug.Assert(errors != null, "errors != null");

                    if (errors.FirstOrDefault() == null)
                    {
                        throw new InvalidOperationException();
                    }

                    throw new InvalidOperationException(errors.FirstOrDefault().ErrorMessage);
                }

                _odcmModel = new OdcmModel(serviceMetadata);
                _propertyCapabilitiesCache = new PropertyCapabilitiesCache();

                AddPrimitives();

                WriteNamespaces();

                _propertyCapabilitiesCache.EnsureProjectionsForProperties();

                _propertyCapabilitiesCache.CreateDistinctProjectionsForWellKnownBooleanTypes();

                LogModelStats();

                return _odcmModel;
            }