/// <summary> /// Build a Discriminator object /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="resultClass">The result class.</param> /// <param name="dataExchangeFactory">The data exchange factory.</param> /// <param name="cases">The case element.</param> /// <returns></returns> public static Discriminator Deserialize( IConfiguration configuration, Type resultClass, DataExchangeFactory dataExchangeFactory, IList<Case> cases) { string callBackName = ConfigurationUtils.GetStringAttribute(configuration.Attributes, ConfigConstants.ATTRIBUTE_TYPEHANDLER); string clrType = ConfigurationUtils.GetStringAttribute(configuration.Attributes, ConfigConstants.ATTRIBUTE_TYPE); int columnIndex = ConfigurationUtils.GetIntAttribute(configuration.Attributes, ConfigConstants.ATTRIBUTE_COLUMNINDEX, ResultProperty.UNKNOWN_COLUMN_INDEX); string columnName = ConfigurationUtils.GetStringAttribute(configuration.Attributes, ConfigConstants.ATTRIBUTE_COLUMN); string dbType = ConfigurationUtils.GetStringAttribute(configuration.Attributes, ConfigConstants.ATTRIBUTE_DBTYPE); string nullValue = configuration.GetAttributeValue(ConfigConstants.ATTRIBUTE_NULLVALUE); Discriminator discriminator = new Discriminator( callBackName, clrType, columnIndex, columnName, dbType, nullValue, cases, resultClass, dataExchangeFactory ); return discriminator; }
/// <summary> /// Initializes a new instance of the <see cref="ResultMap"/> class. /// </summary> /// <param name="id">Identifier used to identify the resultMap amongst the others.</param> /// <param name="className">The output class name of the resultMap.</param> /// <param name="extendMap">The extend result map bame.</param> /// <param name="groupBy">The groupBy properties</param> /// <param name="keyColumns">The key columns.</param> /// <param name="type">The result type.</param> /// <param name="dataExchange">The data exchange.</param> /// <param name="objectFactory">The object factory.</param> /// <param name="typeHandlerFactory">The type handler factory.</param> /// <param name="properties">The properties.</param> /// <param name="parameters">The parameters.</param> /// <param name="discriminator">The discriminator.</param> public ResultMap( string id, string className, string extendMap, string groupBy, string keyColumns, Type type, IDataExchange dataExchange, IFactory objectFactory, TypeHandlerFactory typeHandlerFactory, ResultPropertyCollection properties, ArgumentPropertyCollection parameters, Discriminator discriminator) { Contract.Require.That(id, Is.Not.Null & Is.Not.Empty).When("retrieving argument id in ResultMap constructor"); Contract.Require.That(className, Is.Not.Null & Is.Not.Empty).When("retrieving argument className in ResultMap constructor"); Contract.Require.That(type, Is.Not.Null).When("retrieving argument type in ResultMap constructor"); Contract.Require.That(typeHandlerFactory, Is.Not.Null).When("retrieving argument typeHandlerFactory in ResultMap constructor"); nullResultMap = new NullResultMap(); this.id = id; this.className = className; this.extendMap = extendMap; this.type = type; this.dataExchange = dataExchange; this.properties = properties; this.parameters = parameters; this.discriminator = discriminator; this.objectFactory = objectFactory; isSimpleType = typeHandlerFactory.IsSimpleType(type); //对groupBy属性值的处理 if (!string.IsNullOrEmpty(groupBy)) { string[] props = groupBy.Split(','); for (int i = 0; i < props.Length; i++) { string memberName = props[i].Trim(); groupByPropertyNames.Add(memberName); } //完成对groupByProperties的初始化 InitializeGroupByProperties(); CheckGroupBy(); } //对keyColumns属性值的处理 if (!string.IsNullOrEmpty(keyColumns)) { string[] columns = keyColumns.Split(','); for (int i = 0; i < columns.Length; i++) { string column = columns[i].Trim(); keyPropertyNames.Add(column); } InitializeKeysProperties(); CheckKeysProperties(); } }
/// <summary> /// Initializes a new instance of the <see cref="ResultMap"/> class. /// </summary> /// <param name="id">Identifier used to identify the resultMap amongst the others.</param> /// <param name="className">The output class name of the resultMap.</param> /// <param name="extendMap">The extend result map bame.</param> /// <param name="groupBy">The groupBy properties</param> /// <param name="keyColumns">The key columns.</param> /// <param name="type">The result type.</param> /// <param name="dataExchange">The data exchange.</param> /// <param name="objectFactory">The object factory.</param> /// <param name="typeHandlerFactory">The type handler factory.</param> /// <param name="properties">The properties.</param> /// <param name="parameters">The parameters.</param> /// <param name="discriminator">The discriminator.</param> public ResultMap( string id, string className, string extendMap, string groupBy, string keyColumns, Type type, IDataExchange dataExchange, IFactory objectFactory, TypeHandlerFactory typeHandlerFactory, ResultPropertyCollection properties, ArgumentPropertyCollection parameters, Discriminator discriminator) { Contract.Require.That(id, Is.Not.Null & Is.Not.Empty).When("retrieving argument id in ResultMap constructor"); Contract.Require.That(className, Is.Not.Null & Is.Not.Empty).When("retrieving argument className in ResultMap constructor"); Contract.Require.That(type, Is.Not.Null).When("retrieving argument type in ResultMap constructor"); Contract.Require.That(typeHandlerFactory, Is.Not.Null).When("retrieving argument typeHandlerFactory in ResultMap constructor"); nullResultMap = new NullResultMap(); this.id = id; this.className = className; this.extendMap = extendMap; this.type = type; this.dataExchange = dataExchange; this.properties = properties; this.parameters = parameters; this.discriminator = discriminator; this.objectFactory = objectFactory; isSimpleType = typeHandlerFactory.IsSimpleType(type); if (!string.IsNullOrEmpty(groupBy)) { string[] props = groupBy.Split(','); for (int i = 0; i < props.Length; i++) { string memberName = props[i].Trim(); groupByPropertyNames.Add(memberName); } InitializeGroupByProperties(); CheckGroupBy(); } if (!string.IsNullOrEmpty(keyColumns)) { string[] columns = keyColumns.Split(','); for (int i = 0; i < columns.Length; i++) { string column = columns[i].Trim(); keyPropertyNames.Add(column); } InitializeKeysProperties(); CheckKeysProperties(); } }
/// <summary> /// Stores Discriminator from which the subMaps property must be resolved /// Delay resolution until all the ResultMap are processed. /// /// /// </summary> /// <param name="discriminator">The discriminator.</param> private void WaitDiscriminatorResolution(Discriminator discriminator) { discriminators.Add(discriminator); }