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); } } }
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(); } }
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); } } } }
/// <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)); }
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); }
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)); } }
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}"); }
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); }
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}"); }
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(); } }
/// <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)); }