OscarInserttable.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 OscarInserttable<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. var result = Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()).ObjToInt();
  18. return result;
  19. }
  20. public override async Task<int> ExecuteReturnIdentityAsync()
  21. {
  22. InsertBuilder.IsReturnIdentity = true;
  23. PreToSql();
  24. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault()));
  25. RestoreMapping();
  26. var obj = await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
  27. var result = obj.ObjToInt();
  28. return result;
  29. }
  30. public override KeyValuePair<string, List<SugarParameter>> ToSql()
  31. {
  32. var result= base.ToSql();
  33. return new KeyValuePair<string, List<SugarParameter>>(result.Key.Replace("$PrimaryKey", GetPrimaryKeys().FirstOrDefault()), result.Value);
  34. }
  35. public override long ExecuteReturnBigIdentity()
  36. {
  37. InsertBuilder.IsReturnIdentity = true;
  38. PreToSql();
  39. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault()));
  40. RestoreMapping();
  41. var result = Convert.ToInt64(Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0");
  42. return result;
  43. }
  44. public override async Task<long> ExecuteReturnBigIdentityAsync()
  45. {
  46. InsertBuilder.IsReturnIdentity = true;
  47. PreToSql();
  48. string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault()));
  49. RestoreMapping();
  50. var result = Convert.ToInt64(await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0");
  51. return result;
  52. }
  53. public override bool ExecuteCommandIdentityIntoEntity()
  54. {
  55. var result = InsertObjs.First();
  56. var identityKeys = GetIdentityKeys();
  57. if (identityKeys.Count == 0) { return this.ExecuteCommand() > 0; }
  58. var idValue = ExecuteReturnBigIdentity();
  59. Check.Exception(identityKeys.Count > 1, "ExecuteCommandIdentityIntoEntity does not support multiple identity keys");
  60. var identityKey = identityKeys.First();
  61. object setValue = 0;
  62. if (idValue > int.MaxValue)
  63. setValue = idValue;
  64. else
  65. setValue = Convert.ToInt32(idValue);
  66. var propertyName = this.Context.EntityMaintenance.GetPropertyName<T>(identityKey);
  67. typeof(T).GetProperties().First(t => t.Name.ToUpper() == propertyName.ToUpper()).SetValue(result, setValue, null);
  68. return idValue > 0;
  69. }
  70. }
  71. }