Esempio n. 1
0
        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));
        }