Ejemplo n.º 1
0
		protected virtual SqlParameter AddSqlParameter(SqlStatement sqlStatement, IList parameters, string paramName, object obj, IPropertyMap propertyMap, object value, IColumnMap columnMap, bool noNullStatusCheck)
		{
			DbType dataType = columnMap.DataType;
			IPropertyMap idPropertyMap;
			IObjectManager om = m_SqlEngineManager.Context.ObjectManager;
			IClassMap refClassMap;
			IColumnMap forColMap;
			IClassMap realRefClassMap;
			IQueryParameter param = new QueryParameter(paramName, columnMap.DataType) ;
			parameters.Add(param);
			SqlParameter sqlParameter = sqlStatement.AddSqlParameter(paramName, dataType);
			if (Convert.IsDBNull(value) || value == null)
			{
				param.Value = DBNull.Value;
			}
			if (!(noNullStatusCheck))
			{
				if (om.GetNullValueStatus(obj, propertyMap.Name))
				{
					param.Value = DBNull.Value;
					sqlParameter.Value = DBNull.Value;
					return sqlParameter;
				}				
			}
			if (propertyMap != null)
			{
				if (!(propertyMap.ReferenceType == ReferenceType.None))
				{
					if (value == null)
					{
						param.Value = DBNull.Value;
						sqlParameter.Value = DBNull.Value;
						return sqlParameter;
					}
					else
					{
						if (om.GetObjectStatus(value) == ObjectStatus.UpForCreation)
						{
							param.Value = DBNull.Value;
							sqlParameter.Value = DBNull.Value;
							return sqlParameter;
						}
						else
						{
							refClassMap = propertyMap.MustGetReferencedClassMap();
							forColMap = columnMap.MustGetPrimaryKeyColumnMap();
							dataType = forColMap.DataType;
							if (refClassMap.GetTypeColumnMap() != null && refClassMap.GetTypeColumnMap() == forColMap)
							{
								realRefClassMap = refClassMap.DomainMap.MustGetClassMap(value.GetType());
								value = realRefClassMap.TypeValue;
							}
							else
							{
								idPropertyMap = refClassMap.MustGetPropertyMapForColumnMap(forColMap);
								value = om.GetPropertyValue(value, idPropertyMap.Name);
							}
						}
					}
				}
			}
			param.Value = value;
			sqlParameter.Value = value;
			return sqlParameter;
		}