public TResult ToSingle <TResult>(ExecutionContext executionContext)
        {
            TResult result            = default;
            var     resultType        = executionContext.Result.ResultType;
            var     dataReader        = executionContext.DataReaderWrapper;
            var     multipleResultMap = executionContext.Request.MultipleResultMap;

            if (multipleResultMap.Root != null)
            {
                var deser = _deserializerFactory.Get(executionContext, executionContext.Result.ResultType);
                result = deser.ToSingle <TResult>(executionContext);
                if (result == null)
                {
                    return(default(TResult));
                }

                dataReader.NextResult();
            }
            else
            {
                result = (TResult)executionContext.SmartSqlConfig.ObjectFactoryBuilder.GetObjectFactory(resultType,
                                                                                                        Type.EmptyTypes)(null);
            }

            foreach (var resultMap in multipleResultMap.Results)
            {
                if (resultMap == multipleResultMap.Root)
                {
                    continue;
                }

                #region Set Muti Property

                var propertyInfo    = resultType.GetProperty(resultMap.Property);
                var setProperty     = _setAccessorFactory.Create(propertyInfo);
                var deser           = _deserializerFactory.Get(executionContext, propertyInfo.PropertyType);
                var resultMapResult = TypeDeserializer.Deserialize(propertyInfo.PropertyType, deser, executionContext);
                setProperty(result, resultMapResult);

                #endregion

                if (!dataReader.NextResult())
                {
                    break;
                }
            }

            return(result);
        }
Example #2
0
        public static TPrimaryKey Insert <TEntity, TPrimaryKey>(this IDbSession dbSession, TEntity entity)
        {
            var           dyParams   = ToSqlParameters <TEntity>(entity, dbSession.SmartSqlConfig.Settings.IgnoreParameterCase);
            StringBuilder sqlBuilder = BuildInsertSql <TEntity>(dbSession.SmartSqlConfig.Database.DbProvider, dyParams);
            var           dbProvider = dbSession.SmartSqlConfig.Database.DbProvider;
            var           pkCol      = EntityMetaDataCache <TEntity> .PrimaryKey;

            if (dbProvider.Type == DbProviderManager.POSTGRESQL_DBPROVIDER.Type)
            {
                sqlBuilder.AppendFormat(" Returning {0};", pkCol.Name);
            }
            else
            {
                sqlBuilder.Append(dbProvider.SelectAutoIncrement);
            }

            var id = dbSession.ExecuteScalar <TPrimaryKey>(new RequestContext
            {
                RealSql = sqlBuilder.ToString(),
                Request = dyParams
            });

            _setAccessorFactory.Create(pkCol.Property)(entity, id);
            return(id);
        }
Example #3
0
        public void Set_Int32()
        {
            var obj = new AllPrimitive {
            };
            ISetAccessorFactory setAccessorFactory = EmitSetAccessorFactory.Instance;
            var set_Int32 = setAccessorFactory.Create(typeof(AllPrimitive), nameof(AllPrimitive.Int32));

            set_Int32(obj, 1);
            Assert.Equal(1, obj.Int32);
        }
        public static TPrimaryKey Insert <TEntity, TPrimaryKey>(this IDbSession dbSession, TEntity entity)
        {
            var dyParams = ToSqlParameters <TEntity>(entity, dbSession.SmartSqlConfig.Settings.IgnoreParameterCase);
            var scope    = EntityMetaDataCache <TEntity> .Scope;

            var pkCol = EntityMetaDataCache <TEntity> .PrimaryKey;


            var id = dbSession.ExecuteScalar <TPrimaryKey>(new RequestContext
            {
                Scope   = scope,
                SqlId   = CUDStatementName.INSERT_RETURN_ID,
                Request = dyParams
            });

            _setAccessorFactory.Create(pkCol.Property)(entity, id);
            return(id);
        }