示例#1
0
        public virtual bool ExistsById <T>(params object[] keyValues)
        {
            OpenConnection();

            var type      = typeof(T);
            var tablePath = QueryBuilder.GetMapperTablePath <T>();

            var typeMapping = (TarkTypeMapping <T>)TarkConfigurationMapping.ManageMapping <T>();
            var mappedKeys  = typeMapping.GetMappedOrderedKeys();

            if (keyValues.Count() == 0 || mappedKeys.Count() != keyValues.Length)
            {
                throw new MissingPrimaryKeyException();
            }

            using (IDbCommand cmd = _connection.CreateCommand())
            {
                StringBuilder cmdFilter = new StringBuilder();

                for (int i = 0; i < keyValues.Count(); i++)
                {
                    cmdFilter.Append($"{ mappedKeys[i] } = @{ mappedKeys[i] } ");

                    if (i != keyValues.Count() - 1)
                    {
                        cmdFilter.Append("AND ");
                    }

                    //Uses ADO Sql Parameters in order to avoid SQL Injection attacks
                    var dbParam = cmd.CreateParameter();
                    dbParam.ParameterName = $"@{ mappedKeys[i] }";
                    dbParam.Value         = keyValues[i];

                    if (dbParam.Value is string)
                    {
                        dbParam.DbType = TarkConfigurationMapping.DefaultStringDbType;
                    }

                    cmd.Parameters.Add(dbParam);
                }

                cmd.CommandText = $"SELECT TOP 1 NULL FROM {tablePath} WHERE {cmdFilter.ToString()}";
                cmd.CommandType = CommandType.Text;

                if (IsMockCommand(cmd))
                {
                    return(false);
                }

                using (IDataReader dr = cmd.ExecuteReader())
                {
                    var result = dr.Read();
                    dr.Close();
                    return(result);
                }
            }
        }
示例#2
0
        public virtual void Remove <T>(T entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            OpenConnection();

            var type      = typeof(T);
            var tablePath = QueryBuilder.GetMapperTablePath <T>();

            var typeMapping = (TarkTypeMapping <T>)TarkConfigurationMapping.ManageMapping <T>();
            var mappingKeys = typeMapping.PropertiesMappings.Where(x => x.Value.IsKeyColumn()).ToArray();

            StringBuilder cmdKeys = new StringBuilder();

            using (IDbCommand cmd = _connection.CreateCommand())
            {
                for (int i = 0; i < mappingKeys.Count(); i++)
                {
                    var columnName = mappingKeys[i].Key;

                    //Keys appending
                    cmdKeys.Append($"{columnName} = @{ columnName }");

                    if (i != mappingKeys.Count() - 1)
                    {
                        cmdKeys.Append(", ");
                    }

                    //Uses ADO Sql Parameters in order to avoid SQL Injection attacks
                    var dbParam = cmd.CreateParameter();
                    dbParam.ParameterName = $"@{ columnName }";
                    dbParam.Value         = mappingKeys[i].Value.Property.GetValue(entity);

                    if (dbParam.Value is string)
                    {
                        dbParam.DbType = TarkConfigurationMapping.DefaultStringDbType;
                    }

                    cmd.Parameters.Add(dbParam);
                }

                cmd.CommandText = $"DELETE {tablePath} WHERE {cmdKeys.ToString()}";
                cmd.CommandType = CommandType.Text;

                if (IsMockCommand(cmd))
                {
                    return;
                }

                cmd.ExecuteNonQuery();
            }
        }
示例#3
0
        public virtual bool ExistsWhere <T, TProperty>(Expression <Func <T, TProperty> > propertyLambda, object value)
        {
            var typeMapping = (TarkTypeMapping <T>)TarkConfigurationMapping.ManageMapping <T>();
            var property    = propertyLambda.GetPropertyInfo();

            KeyValuePair <string, TarkColumnMapping> columnMapping =
                typeMapping.PropertiesMappings.Where(x => x.Value.Property == property).FirstOrDefault();

            if (columnMapping.Equals(default(KeyValuePair <string, TarkColumnMapping>)))
            {
                throw new InvalidFilterCriteriaException("Property mapping not found");
            }

            var columnName = columnMapping.Key;

            OpenConnection();

            var tablePath  = QueryBuilder.GetMapperTablePath <T>();
            var mappedKeys = typeMapping.GetMappedOrderedKeys();

            using (IDbCommand cmd = _connection.CreateCommand())
            {
                //Uses ADO Sql Parameters in order to avoid SQL Injection attacks
                var dbParam = cmd.CreateParameter();
                dbParam.ParameterName = $"@{ columnName }";
                dbParam.Value         = value;

                if (dbParam.Value is string)
                {
                    dbParam.DbType = TarkConfigurationMapping.DefaultStringDbType;
                }

                cmd.Parameters.Add(dbParam);

                cmd.CommandText = $"SELECT * FROM {tablePath} WHERE {columnName} = @{columnName}";
                cmd.CommandType = CommandType.Text;

                if (IsMockCommand(cmd))
                {
                    return(false);
                }

                using (IDataReader dr = cmd.ExecuteReader())
                {
                    if (dr.Read())
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
        }
示例#4
0
        /// <summary>
        /// Create and object and fill it's mapped properties through a DataReader record
        /// </summary>
        /// <param name="dr">DataReader in the current record with fields mapped to the object type</param>
        /// <returns>A new instance of the object type with the filled properties</returns>
        public T CreateObject <T>(IDataReader dr)
        {
            var mapping = TarkConfigurationMapping.ManageMapping <T>();

            string[] columnNames = new string[dr.FieldCount];
            for (int i = 0; i < dr.FieldCount; i++)
            {
                columnNames[i] = dr.GetName(i);
            }

            return(CreateObject(dr, mapping, columnNames));
        }
示例#5
0
        public IEnumerable <T> ToList <T>(DataTable dt)
        {
            List <T> lista = new List <T>();

            //Search or map the type into the singleton manager
            var mapping = TarkConfigurationMapping.ManageMapping <T>();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                lista.Add(CreateObject <T>(dt.Rows[i], mapping));
            }

            return(lista);
        }
示例#6
0
        public string GetMapperTablePath <T>()
        {
            Type type = typeof(T);

            var typeMapping = (TarkTypeMapping <T>)TarkConfigurationMapping.ManageMapping <T>();

            if (!String.IsNullOrWhiteSpace(typeMapping.Database))
            {
                return(String.Format("{0}.{1}.{2} {3}", typeMapping.Database, typeMapping.Schema, typeMapping.Table, TableHint));
            }
            else
            {
                return(String.Format("{0}.{1} {2}", typeMapping.Schema, typeMapping.Table, TableHint));
            }
        }
示例#7
0
        public void UnitTest_ManualMapping()
        {
            Stopwatch watch = new Stopwatch();

            watch.Start();

            var tarkOrm = new TarkOrm("localhost");

            TarkConfigurationMapping.AutoMapType <TestOrmTestMapping>()
            .MapProperty(x => x.classx, "Classification")
            .MapProperty(x => x.description, "Name")
            .ToTable("TestOrm");

            var list = tarkOrm.GetAll <TestOrmTestMapping>();

            watch.Stop();

            Debugger.Log(0, "", $"TarkORM Elapsed MS: {watch.ElapsedMilliseconds.ToString()}{Environment.NewLine}");
        }
示例#8
0
        public IEnumerable <T> ToList <T>(IDataReader dr)
        {
            List <T> lista = new List <T>();

            //Search or map the type into the singleton manager
            var mapping = TarkConfigurationMapping.ManageMapping <T>();

            string[] columnNames = new string[dr.FieldCount];
            for (int i = 0; i < dr.FieldCount; i++)
            {
                columnNames[i] = dr.GetName(i);
            }

            while (dr.Read())
            {
                lista.Add(CreateObject(dr, mapping, columnNames));
            }

            return(lista);
        }
示例#9
0
        public void UnitTest_IgnoreMapping()
        {
            Stopwatch watch = new Stopwatch();

            watch.Start();

            var tarkOrm = new TarkOrm("localhost");

            TarkConfigurationMapping.DefaultStringDbType = System.Data.DbType.AnsiString;
            TarkConfigurationMapping.CreateEmptyMapType <TestOrmTestMapping>()
            .MapProperty(x => x.classx, "Classification")
            .MapProperty(x => x.description, "Name")
            .MapProperty(x => x.CreationDate)
            .MapProperty(x => x.Id, new KeyAttribute())
            .ToTable("TestOrm");

            var list = tarkOrm.GetWhere <TestOrmTestMapping, string>(x => x.description, "Polskyman");

            var item = tarkOrm.GetById <TestOrmTestMapping>(1);

            watch.Stop();

            Debugger.Log(0, "", $"TarkORM Elapsed MS: {watch.ElapsedMilliseconds.ToString()}{Environment.NewLine}");
        }
示例#10
0
        public virtual void Add <T>(T entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            OpenConnection();

            var tablePath = QueryBuilder.GetMapperTablePath <T>();

            using (IDbCommand cmd = _connection.CreateCommand())
            {
                StringBuilder cmdColumns = new StringBuilder();
                StringBuilder cmdValues  = new StringBuilder();

                var properties = entity.GetType().GetProperties();

                var typeMapping = (TarkTypeMapping <T>)TarkConfigurationMapping.ManageMapping <T>();

                var lastItem = typeMapping.PropertiesMappings.Last();
                foreach (var item in typeMapping.PropertiesMappings)
                {
                    var columnName = item.Key;

                    if (item.Value.IsReadOnlyColumn())
                    {
                        continue;
                    }

                    //Column name appending
                    cmdColumns.Append(columnName);
                    cmdValues.Append($"@{ columnName }");

                    if (item.Key != lastItem.Key)
                    {
                        cmdColumns.Append(", ");
                        cmdValues.Append(", ");
                    }

                    //Uses ADO Sql Parameters in order to avoid SQL Injection attacks
                    var dbParam = cmd.CreateParameter();
                    dbParam.ParameterName = $"@{ columnName }";

                    var paramValue = item.Value.Property.GetValue(entity) ?? DBNull.Value;
                    dbParam.Value = paramValue;

                    if (dbParam.Value is string)
                    {
                        dbParam.DbType = TarkConfigurationMapping.DefaultStringDbType;
                    }

                    cmd.Parameters.Add(dbParam);
                }

                cmd.CommandText = $"INSERT INTO {tablePath} ({cmdColumns.ToString()}) VALUES ({cmdValues.ToString()})";
                cmd.CommandType = CommandType.Text;

                if (IsMockCommand(cmd))
                {
                    return;
                }

                cmd.ExecuteNonQuery();
            }
        }
示例#11
0
        /// <summary>
        /// Create and object and fill it's mapped properties through a DataReader record
        /// </summary>
        /// <param name="dr">DataReader in the current record with fields mapped to the object type</param>
        /// <returns>A new instance of the object type with the filled properties</returns>
        public T CreateObject <T>(DataRow dr)
        {
            var mapping = TarkConfigurationMapping.ManageMapping <T>();

            return(CreateObject <T>(dr, mapping));
        }