diff --git a/Dapper.SimpleCRUD/SimpleCRUD.cs b/Dapper.SimpleCRUD/SimpleCRUD.cs index 691075c..717a684 100644 --- a/Dapper.SimpleCRUD/SimpleCRUD.cs +++ b/Dapper.SimpleCRUD/SimpleCRUD.cs @@ -706,8 +706,13 @@ private static void BuildUpdateSet(T entityToUpdate, StringBuilder masterSb) for (var i = 0; i < nonIdProps.Length; i++) { var property = nonIdProps[i]; + var apParamPrefix = "@"; + if (_dialect == Dialect.Oracle) + { + apParamPrefix = ":"; + } - sb.AppendFormat("{0} = @{1}", GetColumnName(property), property.Name); + sb.AppendFormat("{0} = " + apParamPrefix + "{1}", GetColumnName(property), property.Name); if (i < nonIdProps.Length - 1) sb.AppendFormat(", "); } @@ -744,6 +749,7 @@ private static void BuildWhere(StringBuilder sb, IEnumerable(StringBuilder sb, IEnumerable(StringBuilder masterSb) if (property.Name.Equals("Id", StringComparison.OrdinalIgnoreCase) && property.GetCustomAttributes(true).All(attr => attr.GetType().Name != typeof(RequiredAttribute).Name) && property.PropertyType != typeof(Guid)) continue; - sb.AppendFormat("@{0}", property.Name); + var apParamPrefix = "@"; + if (_dialect == Dialect.Oracle) + { + apParamPrefix = ":"; + } + + sb.AppendFormat(apParamPrefix + "{0}", property.Name); if (i < props.Count() - 1) sb.Append(", "); } @@ -1078,9 +1096,16 @@ public virtual string ResolveColumnName(PropertyInfo propertyInfo) if (columnattr != null) { columnName = Encapsulate(columnattr.Name); + if (Debugger.IsAttached) Trace.WriteLine(String.Format("Column name for type overridden from {0} to {1}", propertyInfo.Name, columnName)); } + + if (_dialect == Dialect.Oracle) + { + columnName = columnName.ToUpper(); + } + return columnName; } } diff --git a/Dapper.SimpleCRUD/SimpleCRUDAsync.cs b/Dapper.SimpleCRUD/SimpleCRUDAsync.cs index ff70770..a112dc0 100644 --- a/Dapper.SimpleCRUD/SimpleCRUDAsync.cs +++ b/Dapper.SimpleCRUD/SimpleCRUDAsync.cs @@ -41,27 +41,27 @@ public static async Task GetAsync(this IDbConnection connection, object id //create a new empty instance of the type to get the base properties BuildSelect(sb, GetScaffoldableProperties().ToArray()); sb.AppendFormat(" from {0} where ", name); + BuildWhere(sb, idProps); - for (var i = 0; i < idProps.Count; i++) + var dynamicParameters = new DynamicParameters(); + foreach (var property in idProps) { - if (i > 0) - sb.Append(" and "); - sb.AppendFormat("{0} = @{1}", GetColumnName(idProps[i]), idProps[i].Name); - } + var value = id; + if (_dialect == Dialect.Oracle) + { + if (Guid.TryParse(value.ToString(), out var result)) + { + value = value.ToString(); + } + } - var dynParms = new DynamicParameters(); - if (idProps.Count == 1) - dynParms.Add("@" + idProps.First().Name, id); - else - { - foreach (var prop in idProps) - dynParms.Add("@" + prop.Name, id.GetType().GetProperty(prop.Name).GetValue(id, null)); + dynamicParameters.Add(property.Name, value); } if (Debugger.IsAttached) Trace.WriteLine(String.Format("Get<{0}>: {1} with Id: {2}", currenttype, sb, id)); - var query = await connection.QueryAsync(sb.ToString(), dynParms, transaction, commandTimeout); + var query = await connection.QueryAsync(sb.ToString(), dynamicParameters, transaction, commandTimeout); return query.FirstOrDefault(); }