/// <summary>
 /// Remove navigation properties defined on derived types
 /// </summary>
 /// <param name="model">The model to fix up</param>
 public void Fixup(EntityModelSchema model)
 {
     foreach (var function in model.Functions.ToList().Where(f => f.Annotations.OfType<ServiceOperationAnnotation>().Any(so => so.IsAction)))
     {
         model.Remove(function);
     }
 }
        /// <summary>
        /// Remove bags and corresponding features in model for EF provider
        /// </summary>
        /// <param name="model">The model to fix up</param>
        public void Fixup(EntityModelSchema model)
        {
            foreach (var namedStructuralType in model.ComplexTypes.OfType<NamedStructuralType>().Concat(model.EntityTypes.OfType<NamedStructuralType>()))
            {
                foreach (var bag in namedStructuralType.Properties.Where(p => p.PropertyType.HasCollection())) 
                {
                    var collectionType = bag.PropertyType as CollectionDataType;
                    bag.PropertyType = collectionType.ElementDataType;
                }
            }

            foreach (var function in model.Functions.ToArray().Where(f => f.ReturnType != null && f.ReturnType.HasCollection()))
            {
                model.Remove(function);
            }

            foreach (var function in model.Functions.ToArray().Where(f => f.Parameters.Any(p => p.DataType.HasCollection())))
            {
                model.Remove(function);
            }
        }
        /// <summary>
        /// Remove spatial properties and functions
        /// </summary>
        /// <param name="model">The model to fix up</param>
        public void Fixup(EntityModelSchema model)
        {
            foreach (var structuralType in model.EntityTypes.OfType<NamedStructuralType>().Concat(model.ComplexTypes.OfType<NamedStructuralType>()))
            {
                foreach (var spatialProperty in structuralType.Properties.ToArray().Where(p => p.PropertyType.IsSpatial()))
                {
                    structuralType.Properties.Remove(spatialProperty);
                }
            }

            foreach (var function in model.Functions.ToList().Where(f => (f.ReturnType != null && f.ReturnType.IsSpatial()) || f.Parameters.Any(p => p.DataType.IsSpatial())))
            {
                model.Remove(function);
            }
        }