ForType() public method

public ForType ( Type type ) : NPoco.PocoData
type System.Type
return NPoco.PocoData
Ejemplo n.º 1
0
        public void Test11()
        {
            var fakeReader = new FakeReader();
            var pocoDataFactory = new PocoDataFactory(new MapperCollection());
            var newPropertyMapper = new PropertyMapper();
            var pocoData = pocoDataFactory.ForType(typeof(NestedConvention));
            newPropertyMapper.Init(fakeReader, pocoData);
            newPropertyMapper.Map(fakeReader, new RowMapperContext() { PocoData = pocoData });

            var sw = Stopwatch.StartNew();

            for (int j = 0; j < 1000; j++)
            {
                newPropertyMapper = new PropertyMapper();
                newPropertyMapper.Init(fakeReader, pocoData);

                for (int i = 0; i < 1000; i++)
                {
                    newPropertyMapper.Map(fakeReader, new RowMapperContext() { PocoData = pocoData });
                }
            }

            sw.Stop();

            Console.WriteLine("Elapsed Time (ms): {0}", sw.ElapsedMilliseconds);
            //250
        }
Ejemplo n.º 2
0
        private Sql GetExistsSql <T>(object primaryKeyorPoco, bool isPoco)
        {
            var index = 0;
            var pd    = PocoDataFactory.ForType(typeof(T));
            var primaryKeyValuePairs = GetPrimaryKeyValues(this, pd, pd.TableInfo.PrimaryKey, primaryKeyorPoco, isPoco);
            var sql  = string.Format(DatabaseType.GetExistsSql(), DatabaseType.EscapeTableName(pd.TableInfo.TableName), BuildPrimaryKeySql(this, primaryKeyValuePairs, ref index));
            var args = primaryKeyValuePairs.Select(x => x.Value).ToArray();

            return(new Sql(sql, args));
        }
Ejemplo n.º 3
0
        public Task <int> UpdateAsync <T>(T poco, Expression <Func <T, object> > fields)
        {
            var expression = DatabaseType.ExpressionVisitor <T>(this, PocoDataFactory.ForType(typeof(T)));

            expression = expression.Select(fields);
            var columnNames = ((ISqlExpression)expression).SelectMembers.Select(x => x.PocoColumn.ColumnName);
            var otherNames  = ((ISqlExpression)expression).GeneralMembers.Select(x => x.PocoColumn.ColumnName);

            return(UpdateAsync(poco, columnNames.Union(otherNames)));
        }
Ejemplo n.º 4
0
        private async Task <int> UpdateBatchAsyncImp <T>(IEnumerable <UpdateBatch <T> > pocos, BatchOptions options, bool sync)
        {
            options = options ?? new BatchOptions();
            int result = 0;

            try
            {
                OpenSharedConnectionInternal();
                PocoData pd = null;

                foreach (var batchedPocos in pocos.Chunkify(options.BatchSize))
                {
                    var preparedUpdates = batchedPocos.Select(x =>
                    {
                        if (pd == null)
                        {
                            pd = PocoDataFactory.ForType(x.Poco.GetType());
                        }
                        return(UpdateStatements.PrepareUpdate(this, pd, pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, x.Poco, null, x.Snapshot?.UpdatedColumns()));
                    }).ToArray();

                    var sql = new Sql();
                    foreach (var preparedUpdate in preparedUpdates)
                    {
                        if (preparedUpdate.Sql != null)
                        {
                            sql.Append(preparedUpdate.Sql + options.StatementSeperator, preparedUpdate.Rawvalues.ToArray());
                        }
                    }

                    using (var cmd = CreateCommand(_sharedConnection, sql.SQL, sql.Arguments))
                    {
                        result += sync
                            ? ExecuteNonQueryHelper(cmd)
                            : await ExecuteNonQueryHelperAsync(cmd).ConfigureAwait(false);
                    }
                }
            }
            catch (Exception x)
            {
                OnExceptionInternal(x);
                throw;
            }
            finally
            {
                CloseSharedConnectionInternal();
            }

            return(result);
        }
Ejemplo n.º 5
0
        public async Task <int> InsertBatchAsync <T>(IEnumerable <T> pocos, BatchOptions options = null)
        {
            options = options ?? new BatchOptions();
            var result = 0;

            try
            {
                OpenSharedConnectionInternal();
                PocoData pd = null;

                foreach (var batchedPocos in pocos.Chunkify(options.BatchSize))
                {
                    var preparedInserts = batchedPocos.Select(x =>
                    {
                        if (pd == null)
                        {
                            pd = PocoDataFactory.ForType(x.GetType());
                        }
                        return(InsertStatements.PrepareInsertSql(this, pd, pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, pd.TableInfo.AutoIncrement, x));
                    }).ToArray();

                    var sql = new Sql();
                    foreach (var preparedInsertSql in preparedInserts)
                    {
                        sql.Append(preparedInsertSql.Sql + options.StatementSeperator, preparedInsertSql.Rawvalues.ToArray());
                    }

                    using (var cmd = CreateCommand(_sharedConnection, sql.SQL, sql.Arguments))
                    {
                        result += await ExecuteNonQueryHelperAsync(cmd);
                    }
                }
            }
            catch (Exception x)
            {
                OnExceptionInternal(x);
                throw;
            }
            finally
            {
                CloseSharedConnectionInternal();
            }

            return(result);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Performs an SQL Insert
        /// </summary>
        /// <param name="poco">The POCO object that specifies the column values to be inserted</param>
        /// <returns>The auto allocated primary key of the new record, or null for non-auto-increment tables</returns>
        /// <remarks>The name of the table, it's primary key and whether it's an auto-allocated primary key are retrieved
        /// from the POCO's attributes</remarks>
        public Task <object> InsertAsync <T>(T poco)
        {
            var pd = PocoDataFactory.ForType(poco.GetType());

            return(InsertAsync(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, pd.TableInfo.AutoIncrement, poco));
        }
Ejemplo n.º 7
0
        public Task <int> DeleteAsync(object poco)
        {
            var pd = PocoDataFactory.ForType(poco.GetType());

            return(DeleteAsync(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco));
        }
Ejemplo n.º 8
0
        public Task <int> UpdateAsync(object poco, object primaryKeyValue, IEnumerable <string> columns)
        {
            var pd = PocoDataFactory.ForType(poco.GetType());

            return(UpdateAsync(pd.TableInfo.TableName, pd.TableInfo.PrimaryKey, poco, primaryKeyValue, columns));
        }