Beispiel #1
0
        private void SetChildrens(DbObject target, DbEntityEnum childrenType)
        {
            if (!(Connection.GetConnection() is SqlConnection))
            {
                throw new InvalidCastException();
            }


            using (SqlConnection connection = (SqlConnection)Connection.GetConnection())
            {
                connection.Open();

                List <DbObject> childs = new List <DbObject>();

                string query = _provider.GetLoadNameScript(target.Type, childrenType);

                SqlCommand command = new SqlCommand(query, connection);

                foreach (var param in _provider.GetChildrenLoadParameters(target, childrenType))
                {
                    command.Parameters.Add(param);
                }

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        DbObject child = (DbEntityFactory.ObjectCreator.Create(reader, childrenType));
                        if (!target.AddChild(child))
                        {
                            throw new ArgumentException();
                        }
                        childs.Add(child);
                    }
                }

                foreach (var child in childs)
                {
                    if (child.CanHaveDefinition)
                    {
                        query = _provider.GetDefinitionScript();
                        SqlCommand descCommand = new SqlCommand(query, connection);
                        foreach (var param in _provider.GetDefinitionParamteters(child))
                        {
                            descCommand.Parameters.Add(param);
                        }
                        using (SqlDataReader descReader = descCommand.ExecuteReader())
                        {
                            StringBuilder defText = new StringBuilder();
                            while (descReader.Read())
                            {
                                defText.Append(descReader.GetString(0));
                            }

                            child.Definition = defText.ToString();
                        }
                    }
                }
            }
        }
Beispiel #2
0
        private async Task LoadChildrenInternal(DbObject target, MetadataType childrenType, CancellationToken token)
        {
            using (var connection = _connection.GetConnection())
            {
                await connection.OpenAsync(token);

                var command = _component.CreateCommand();
                command.Connection  = connection;
                command.CommandText = _component.ScriptProvider.ProvideNameScript(target, childrenType);

                using (var reader = await command.ExecuteReaderAsync(token))
                {
                    while (reader.Read())
                    {
                        target.AddChild(_component.ObjectFactory.Create(reader, childrenType));
                    }
                }
            }
        }