1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Text;
- using System.Threading.Tasks;
- namespace SqlSugar
- {
- public class KdbndpInserttable<T> : InsertableProvider<T> where T : class, new()
- {
- public override int ExecuteReturnIdentity()
- {
- InsertBuilder.IsReturnIdentity = true;
- PreToSql();
- string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault() ?? ""));
- RestoreMapping();
- sql = GetSql(sql);
- var result = Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()).ObjToInt();
- return result;
- }
- public override async Task<int> ExecuteReturnIdentityAsync()
- {
- InsertBuilder.IsReturnIdentity = true;
- PreToSql();
- string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault()??""));
- RestoreMapping();
- sql = GetSql(sql);
- var obj = await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
- var result = obj.ObjToInt();
- return result;
- }
- public override KeyValuePair<string, List<SugarParameter>> ToSql()
- {
- var result= base.ToSql();
- return new KeyValuePair<string, List<SugarParameter>>(result.Key.Replace("$PrimaryKey", GetPrimaryKeys().FirstOrDefault()), result.Value);
- }
- public override long ExecuteReturnBigIdentity()
- {
- InsertBuilder.IsReturnIdentity = true;
- PreToSql();
- string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault()??""));
- RestoreMapping();
- sql = GetSql(sql);
- var result = Convert.ToInt64(Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0");
- return result;
- }
- public override async Task<long> ExecuteReturnBigIdentityAsync()
- {
- InsertBuilder.IsReturnIdentity = true;
- PreToSql();
- string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", this.SqlBuilder.GetTranslationColumnName(GetIdentityKeys().FirstOrDefault() ?? ""));
- RestoreMapping();
- sql = GetSql(sql);
- var result = Convert.ToInt64(await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0");
- return result;
- }
- public override bool ExecuteCommandIdentityIntoEntity()
- {
- var result = InsertObjs.First();
- var identityKeys = GetIdentityKeys();
- if (identityKeys.Count == 0) { return this.ExecuteCommand() > 0; }
- var idValue = ExecuteReturnBigIdentity();
- Check.Exception(identityKeys.Count > 1, "ExecuteCommandIdentityIntoEntity does not support multiple identity keys");
- var identityKey = identityKeys.First();
- object setValue = 0;
- if (idValue > int.MaxValue)
- setValue = idValue;
- else
- setValue = Convert.ToInt32(idValue);
- var propertyName = this.Context.EntityMaintenance.GetPropertyName<T>(identityKey);
- typeof(T).GetProperties().First(t => t.Name.ToUpper() == propertyName.ToUpper()).SetValue(result, setValue, null);
- return idValue > 0;
- }
- private string GetSql(string sql)
- {
- if (GetIdentityKeys().FirstOrDefault() == null)
- {
- sql = sql.Replace("returning \"\"", "");
- var id = this.Context.DbMaintenance.GetIsIdentities(this.Context.EntityMaintenance.GetTableName(this.InsertBuilder.GetTableNameString)).FirstOrDefault();
- if (id != null)
- {
- sql = sql.TrimEnd().TrimEnd(';')+ " returning " + this.SqlBuilder.GetTranslationColumnName(id) ;
- }
- }
- return sql;
- }
- }
- }
|