public string Upsert(IClassMapper classMapper) { if (classMapper.HasAutoGeneratedId()) { throw new NotSupportedException($"Upsert does not support auto generated id on tyep [{classMapper.EntityType}]."); } return ($"INSERT INTO {GetTableName(classMapper)} {GetInsertSection(classMapper)} ON CONFLICT ({GetKeysConstraint(classMapper)}) DO UPDATE SET {GetUpdateSection(classMapper)};"); }
public ActionParams Insert(IClassMapper classMap, object entity) { var columns = classMap.GetNotIgnoredColumns(); var guids = new IPropertyMap[0]; if (Configuration.AutoPopulateKeyGuidValue) { guids = columns.Where(x => x.PropertyInfo.PropertyType == typeof(Guid)).ToArray(); foreach (var guid in guids) { if ((Guid)guid.Getter(entity) != Guid.Empty) { continue; } var value = Configuration.GuidCreator.GetGuid(); guid.Setter(entity, value); } } var sql = SqlGenerator.Insert(classMap); var dynamicParameters = new DynamicParameters(); foreach (var column in columns) { dynamicParameters.Add(column.Name, column.Getter(entity)); } if (classMap.HasAutoGeneratedId() && SqlGenerator.SupportsMultipleStatements()) { sql += Configuration.Dialect.BatchSeparator + SqlGenerator.IdentitySql(classMap); } return(ActionParams.New(sql, dynamicParameters)); }