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;
}