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