public SetClause(UpdateQuery <T> parentQuery, object setFields) : this(parentQuery) { var setFieldsType = setFields.GetType(); if (!string.IsNullOrEmpty(setFieldsType.Namespace) || setFieldsType.IsIEnumerable()) { throw new Exception("Set clause only supports anonymous parameters."); } var entityMap = EntityMapper.Entities[typeof(T)]; var setFieldsProps = setFieldsType.GetProperties(); var propMapDefault = default(PropertyMap); var paramGen = ParentQuery.ParameterNameGenerator; FieldParameterPairs = new List <KeyValuePair <string, PropertyMap> >(); foreach (var setFieldPropInfo in setFieldsProps) { var propMap = entityMap.Properties.FirstOrDefault(p => p.Name == setFieldPropInfo.Name); if (propMap == propMapDefault) { throw new Exception(string.Format("Property {0} does not exists for entity {1}", setFieldPropInfo.Name, typeof(T).ToString())); } var paramName = paramGen.GetNextParameterName(propMap.Name); var paramValue = setFieldsType.GetProperty(propMap.Name).GetValue(setFields); ParentQuery.Parameters.Add(paramName, paramValue); FieldParameterPairs.Add(new KeyValuePair <string, PropertyMap>(paramName, propMap)); } }
public SetClause(UpdateQuery <T> parentQuery) { this.ParentQuery = parentQuery; FieldsToUpate = ParentQuery.Fields.Where(f => !f.IsAutoIncrement && !f.IsReadOnly && !f.Ignored && !f.IsComputed && f.IsTableField) .OrderBy(f => f.OrdinalPosition); if (parentQuery.Entity != null) { GenerateFieldParameterPairs(FieldsToUpate); AddToQueryParameters(); } }