/// <summary> /// Builds <see cref="BreezeMetadata"/>. /// </summary> /// <returns>The breeze metadata.</returns> public BreezeMetadata Build() { var metadata = new BreezeMetadata { StructuralTypes = new List <StructuralType>(), ResourceEntityTypeMap = new Dictionary <string, string>(), EnumTypes = new List <EnumType>(), LocalQueryComparisonOptions = _localQueryComparisonOptions ?? "caseInsensitiveSQL" }; _addedTypes.Clear(); _entityMetadata = _classMetadataProvider.GetAll() .Select(o => o.MappedClass) .Where(o => o != null) .Where(o => _includePredicate?.Invoke(o) ?? true) .Distinct() .Select(o => new { MappedClass = o, Metadata = _entityMetadataProvider.GetMetadata(o) }) .ToDictionary(o => o.MappedClass, o => o.Metadata); foreach (var entityMetadata in _entityMetadata.Values) { AddEntityType(entityMetadata, metadata); } if (_clientModelAssemblies == null) { return(metadata); } // Add client models _clientModelMetadata = _clientModelAssemblies?.SelectMany(assembly => assembly.GetTypes() .Where(t => t.IsClass && !t.IsAbstract && _clientModelMetadataProvider.IsClientModel(t))) .Where(t => _includePredicate?.Invoke(t) ?? true) .Select(o => _clientModelMetadataProvider.GetMetadata(o)) .ToDictionary(o => o.Type, o => o); foreach (var modelMetadata in _clientModelMetadata.Values) { AddClientModelType(modelMetadata, metadata); } return(metadata); }