public void SetValue(IEntityProxy instance, string columnName, object value, ColumnMapper mapper) { var parts = columnName.Split('.'); var obj = instance; var columns = this; var type = GetObjectType(obj); if (typeof(IEntityProxy).IsAssignableFrom(type)) { type = type.BaseType; } for (int i = 0; i < parts.Length; i++) { var part = parts[i]; var propertyName = columns[part].PropertyName; var pi = type.GetProperty(propertyName); if (pi == null || !pi.CanWrite) { continue; } if (i == parts.Length - 1) { var mappedValue = mapper.MapToType(value, pi); pi.SetValue(obj, mappedValue); obj.State = EntityState.Unchanged; } else { columns = columns[part].ReferenceTable; obj = pi.GetValue(obj) as IEntityProxy; type = GetObjectType(obj); } } }
private object ExecuteScalar(string command) { Console.WriteLine(command); using (var cmd = new SqlCommand(command, _connection)) { cmd.Transaction = _transaction; var value = cmd.ExecuteScalar(); return(ColumnMapper.MapToType(value)); } }
private object ExecuteScalar(string command, params SqlParameter[] args) { Debug.WriteLine(command); try { using (var cmd = new SqlCommand(command, _connection)) { foreach (var parameter in args) { cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter(parameter.Name, parameter.Value)); } cmd.Transaction = _transaction; var value = cmd.ExecuteScalar(); return(ColumnMapper.MapToType(value)); } } catch (Exception ex) { throw new Exception("SQL command failed: " + command, ex); } }