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); }
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); }
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); }