KdbndpInserttable.cs 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace SqlSugar
  8. {
  9. public class KdbndpInserttable<T> : InsertableProvider<T> where T : class, new()
  10. {
  11. public override int ExecuteReturnIdentity()
  12. {
  13. InsertBuilder.IsReturnIdentity = true;
  14. PreToSql();
  15. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault() ?? ""));
  16. RestoreMapping();
  17. sql = GetSql(sql);
  18. var result = Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()).ObjToInt();
  19. return result;
  20. }
  21. public override async Task<int> ExecuteReturnIdentityAsync()
  22. {
  23. InsertBuilder.IsReturnIdentity = true;
  24. PreToSql();
  25. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault()??""));
  26. RestoreMapping();
  27. sql = GetSql(sql);
  28. var obj = await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
  29. var result = obj.ObjToInt();
  30. return result;
  31. }
  32. public override KeyValuePair<string, List<SugarParameter>> ToSql()
  33. {
  34. var result= base.ToSql();
  35. return new KeyValuePair<string, List<SugarParameter>>(result.Key.Replace("$PrimaryKey", GetPrimaryKeys().FirstOrDefault()), result.Value);
  36. }
  37. public override long ExecuteReturnBigIdentity()
  38. {
  39. InsertBuilder.IsReturnIdentity = true;
  40. PreToSql();
  41. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault()??""));
  42. RestoreMapping();
  43. sql = GetSql(sql);
  44. var result = Convert.ToInt64(Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0");
  45. return result;
  46. }
  47. public override async Task<long> ExecuteReturnBigIdentityAsync()
  48. {
  49. InsertBuilder.IsReturnIdentity = true;
  50. PreToSql();
  51. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault() ?? ""));
  52. RestoreMapping();
  53. sql = GetSql(sql);
  54. var result = Convert.ToInt64(await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0");
  55. return result;
  56. }
  57. public override bool ExecuteCommandIdentityIntoEntity()
  58. {
  59. var result = InsertObjs.First();
  60. var identityKeys = GetIdentityKeys();
  61. if (identityKeys.Count == 0) { return this.ExecuteCommand() > 0; }
  62. var idValue = ExecuteReturnBigIdentity();
  63. Check.Exception(identityKeys.Count > 1, "ExecuteCommandIdentityIntoEntity does not support multiple identity keys");
  64. var identityKey = identityKeys.First();
  65. object setValue = 0;
  66. if (idValue > int.MaxValue)
  67. setValue = idValue;
  68. else
  69. setValue = Convert.ToInt32(idValue);
  70. var propertyName = this.Context.EntityMaintenance.GetPropertyName<T>(identityKey);
  71. typeof(T).GetProperties().First(t => t.Name.ToUpper() == propertyName.ToUpper()).SetValue(result, setValue, null);
  72. return idValue > 0;
  73. }
  74. private string GetSql(string sql)
  75. {
  76. if (GetIdentityKeys().FirstOrDefault() == null)
  77. {
  78. sql = sql.Replace("returning \"\"", "");
  79. var id = this.Context.DbMaintenance.GetIsIdentities(this.Context.EntityMaintenance.GetTableName(this.InsertBuilder.GetTableNameString)).FirstOrDefault();
  80. if (id != null)
  81. {
  82. sql = sql.TrimEnd().TrimEnd(';')+ " returning " + this.SqlBuilder.GetTranslationColumnName(id) ;
  83. }
  84. }
  85. return sql;
  86. }
  87. }
  88. }