private IDataCommand ResolveCommand(XmlReader reader, MetadataFile provider, string @namespace, Action unrecognize) { //创建命令元素对象 var command = new MetadataCommand(provider, this.GetFullName(reader.GetAttribute(XML_NAME_ATTRIBUTE), @namespace), reader.GetAttribute(XML_ALIAS_ATTRIBUTE)) { Type = this.GetAttributeValue(reader, XML_TYPE_ATTRIBUTE, DataCommandType.Procedure), Alias = this.GetAttributeValue <string>(reader, XML_ALIAS_ATTRIBUTE), Mutability = this.GetAttributeValue(reader, XML_MUTABILITY_ATTRIBUTE, CommandMutability.Delete | CommandMutability.Insert | CommandMutability.Update), }; int depth = reader.Depth; var path = reader.GetAttribute(XML_PATH_ATTRIBUTE); while (reader.Read() && reader.Depth > depth) { if (reader.NodeType != XmlNodeType.Element) { continue; } switch (reader.LocalName) { case XML_PARAMETER_ELEMENT: var parameter = new MetadataCommandParameter(command, reader.GetAttribute(XML_NAME_ATTRIBUTE), this.GetDbType(this.GetAttributeValue <string>(reader, XML_TYPE_ATTRIBUTE))) { Direction = this.GetAttributeValue(reader, XML_DIRECTION_ATTRIBUTE, value => GetDirection(value)), Alias = this.GetAttributeValue <string>(reader, XML_ALIAS_ATTRIBUTE), Length = this.GetAttributeValue <int>(reader, XML_LENGTH_ATTRIBUTE), Value = this.GetAttributeValue <object>(reader, XML_VALUE_ATTRIBUTE), }; //将解析成功的命令参数元素加入到命令的参数集合 command.Parameters.Add(parameter); break; case XML_SCRIPT_ELEMENT: var driver = reader.GetAttribute(XML_DRIVER_ATTRIBUTE); if (reader.Read() && (reader.NodeType == XmlNodeType.Text || reader.NodeType == XmlNodeType.CDATA)) { command.Scriptor.SetScript(driver, reader.Value); } break; default: unrecognize(); break; } }
private IDataCommand ResolveCommand(XmlReader reader, MetadataFile provider, string @namespace, Action unrecognize) { //创建命令元素对象 var command = new MetadataCommand(provider, this.GetFullName(reader.GetAttribute(XML_NAME_ATTRIBUTE), @namespace), reader.GetAttribute(XML_ALIAS_ATTRIBUTE)) { Type = this.GetAttributeValue(reader, XML_TYPE_ATTRIBUTE, DataCommandType.Procedure), Text = this.GetAttributeValue <string>(reader, XML_TEXT_ATTRIBUTE), }; int depth = reader.Depth; while (reader.Read() && reader.Depth > depth) { if (reader.NodeType != XmlNodeType.Element) { continue; } switch (reader.LocalName) { case XML_PARAMETER_ELEMENT: var parameter = new MetadataCommandParameter(command, reader.GetAttribute(XML_NAME_ATTRIBUTE), this.GetAttributeValue <Type>(reader, XML_TYPE_ATTRIBUTE)) { Direction = this.GetAttributeValue(reader, XML_DIRECTION_ATTRIBUTE, System.Data.ParameterDirection.Input), Alias = this.GetAttributeValue <string>(reader, XML_ALIAS_ATTRIBUTE), Length = this.GetAttributeValue <int>(reader, XML_LENGTH_ATTRIBUTE), Value = this.GetAttributeValue <object>(reader, XML_VALUE_ATTRIBUTE), }; //将解析成功的命令参数元素加入到命令的参数集合 command.Parameters.Add(parameter); break; case XML_TEXT_ELEMENT: if (reader.NodeType == XmlNodeType.CDATA || reader.NodeType == XmlNodeType.Text) { command.Text = reader.Value; } break; default: unrecognize(); break; } } return(command); }
public MetadataCommandScriptor(MetadataCommand command) { _command = command ?? throw new ArgumentNullException(nameof(command)); _entries = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); }