// internal for testing
        internal static string CreateDefiningQuery(EntitySet entitySet, MetadataWorkspace workspace, DbProviderServices providerServices)
        {
            Debug.Assert(entitySet != null, "entitySet != null");
            Debug.Assert(workspace != null, "workspace != null");
            Debug.Assert(providerServices != null, "providerServices != null");

            var inputBinding = entitySet.Scan().BindAs(entitySet.Name);

            var projectList = new List<KeyValuePair<string, DbExpression>>(entitySet.ElementType.Members.Count);
            foreach (var member in entitySet.ElementType.Members)
            {
                Debug.Assert(member.BuiltInTypeKind == BuiltInTypeKind.EdmProperty, "Every member must be a edmproperty");
                var propertyInfo = (EdmProperty)member;
                projectList.Add(
                    new KeyValuePair<string, DbExpression>(
                        member.Name,
                        inputBinding.Variable.Property(propertyInfo)));
            }
            var query = inputBinding.Project(DbExpressionBuilder.NewRow(projectList));
            var dbCommandTree = new DbQueryCommandTree(workspace, DataSpace.SSpace, query);

            return providerServices.CreateCommandDefinition(dbCommandTree).CreateCommand().CommandText;
        }