Skip to content

Commit

Permalink
DAL.Update支持字典。close #16
Browse files Browse the repository at this point in the history
  • Loading branch information
nnhy committed Nov 1, 2023
1 parent 1bf3e66 commit 2d46d11
Showing 1 changed file with 35 additions and 11 deletions.
46 changes: 35 additions & 11 deletions XCode/DataAccessLayer/DAL_Mapper.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using NewLife;
using NewLife.Collections;
using NewLife.Data;
Expand Down Expand Up @@ -304,8 +300,23 @@ public Int32 Update(Object data, Object where, String? tableName = null)
sb.Append("Update ");
sb.Append(tableName);

var dic = data as IDictionary<String, Object>;
var dps = new List<IDataParameter>();
// Set参数
if (dic != null)
{
sb.Append(" Set ");
var i = 0;
foreach (var item in dic)
{
if (i++ > 0) sb.Append(',');

var p = Db.CreateParameter(item.Key, item.Value, item.Value?.GetType());
dps.Add(p);
sb.AppendFormat("{0}={1}", item.Key, p.ParameterName);
}
}
else
{
sb.Append(" Set ");
var i = 0;
Expand Down Expand Up @@ -337,14 +348,27 @@ public Int32 Update(Object data, Object where, String? tableName = null)
var name = OnGetKeyName(data.GetType());
if (name.IsNullOrEmpty()) name = "Id";

var pi = data.GetType().GetProperty(name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (pi == null) throw new XCodeException($"更新实体对象时未标记主键且未设置where");
if (dic != null)
{
if (!dic.TryGetValue(name, out var val)) throw new XCodeException($"更新实体对象时未标记主键且未设置where");

sb.Append(" Where ");
sb.Append(" Where ");

var p = Db.CreateParameter(pi.Name, pi.GetValue(data, null), pi.PropertyType);
dps.Add(p);
sb.AppendFormat("{0}={1}", pi.Name, p.ParameterName);
var p = Db.CreateParameter(name, val, val?.GetType());
dps.Add(p);
sb.AppendFormat("{0}={1}", name, p.ParameterName);
}
else
{
var pi = data.GetType().GetProperty(name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (pi == null) throw new XCodeException($"更新实体对象时未标记主键且未设置where");

sb.Append(" Where ");

var p = Db.CreateParameter(pi.Name, pi.GetValue(data, null), pi.PropertyType);
dps.Add(p);
sb.AppendFormat("{0}={1}", pi.Name, p.ParameterName);
}
}

var sql = sb.Put(true);
Expand Down

0 comments on commit 2d46d11

Please sign in to comment.