Exemplo n.º 1
0
    //public void Fill<T>(DataSet dataSet, Expression<Func<T, bool>> filterExpression)
    //{
    //    AdsEntityMapping mapping = AdsEntityMapping.GetForType(typeof(T));

    //    Fill<T>(mapping, dataSet, CreateQuery<T>(mapping, filterExpression));
    //}

    public void Delete <T>(string sqlFilterExpression) where T : class
    {
        AdsEntityMapping mapping = AdsEntityMapping.GetForType(typeof(T));

        AdsCommand command = new AdsCommand();

        command.Connection = connection;

        command.CommandText = CreateDeleteQuery <T>(mapping, sqlFilterExpression);
        LastSqlCommandText  = command.CommandText;

        command.ExecuteNonQuery();
    }
Exemplo n.º 2
0
    public object GetAutoIncPrimaryKeyValue(object obj)
    {
        AdsEntityMapping mapping = AdsEntityMapping.GetForType(obj.GetType());

        foreach (AdsEntityMemberMapping memberMapping in mapping.Members)
        {
            if (memberMapping.ColumnAttribute.IsPrimaryKey && memberMapping.ColumnAttribute.IsAutoGenerated)
            {
                return(memberMapping.GetValue(obj));
            }
        }

        return(null);
    }
Exemplo n.º 3
0
    private string CreateDeleteQuery <T>(AdsEntityMapping mapping, string sqlFilterExpression) where T : class
    {
        List <string> parameters = new List <string>();

        foreach (var member in mapping.Members)
        {
            parameters.Add(member.ResolvedName);
        }

        if (!string.IsNullOrEmpty(sqlFilterExpression))
        {
            sqlFilterExpression = " where " + sqlFilterExpression;
        }
        else
        {
            sqlFilterExpression = string.Empty;
        }

        return(string.Format("delete from {0}", mapping.ResolvedName) + sqlFilterExpression);
    }
Exemplo n.º 4
0
    public static AdsEntityMapping GetForType(Type type)
    {
        if (cachedMappings.ContainsKey(type))
        {
            return(cachedMappings[type]);
        }

        object[] attributes = type.GetCustomAttributes(typeof(AdsTableAttribute), true);

        if (attributes != null && attributes.Length > 0)
        {
            AdsEntityMapping mapping = new AdsEntityMapping();

            mapping.EntityType     = type;
            mapping.TableAttribute = (AdsTableAttribute)attributes[0];

            foreach (MemberInfo memberInfo in type.GetMembers())
            {
                object[] memberAttributes = memberInfo.GetCustomAttributes(typeof(AdsColumnAttribute), true);

                if (memberAttributes != null && memberAttributes.Length > 0)
                {
                    AdsEntityMemberMapping memberMapping = new AdsEntityMemberMapping(memberInfo, (AdsColumnAttribute)memberAttributes[0]);

                    mapping.Members.Add(memberMapping);
                }
            }

            cachedMappings.Add(type, mapping);

            return(mapping);
        }
        else
        {
            throw new AdsContextException("The class sent to SaveOrUpdate did not have the necessary AdsTable attribute", null);
        }
    }
Exemplo n.º 5
0
    private string CreateSelectQuery <T>(AdsEntityMapping mapping, int?topCount, string sqlFilterExpression, string sqlOrderExpression) where T : class
    {
        List <string> parameters = new List <string>();

        foreach (var member in mapping.Members)
        {
            parameters.Add(member.ResolvedName);
        }

        string topExpression = string.Empty;

        if (topCount.HasValue)
        {
            topExpression = " top " + topCount.Value;
        }

        if (!string.IsNullOrEmpty(sqlFilterExpression))
        {
            sqlFilterExpression = " where " + sqlFilterExpression;
        }
        else
        {
            sqlFilterExpression = string.Empty;
        }

        if (!string.IsNullOrEmpty(sqlOrderExpression))
        {
            sqlOrderExpression = " order by " + sqlOrderExpression;
        }
        else
        {
            sqlOrderExpression = string.Empty;
        }

        return(string.Format("select{0} {1} from {2}", topExpression, string.Join(",", parameters.ToArray()), mapping.ResolvedName) + sqlFilterExpression + sqlOrderExpression);
    }
Exemplo n.º 6
0
    public void SaveOrUpdate(object obj)
    {
        AdsEntityMapping       mapping = AdsEntityMapping.GetForType(obj.GetType());
        AdsEntityMemberMapping autoIncPrimaryKeyMapping = null;

        bool isInsert = !mapping.IsPrimaryKeySet(obj);

        string list1 = string.Empty;
        string list2 = string.Empty;

        AdsCommand command = new AdsCommand();

        command.Connection = connection;

        foreach (AdsEntityMemberMapping memberMapping in mapping.Members)
        {
            if (memberMapping.ColumnAttribute.IsPrimaryKey && memberMapping.ColumnAttribute.IsAutoGenerated)
            {
                autoIncPrimaryKeyMapping = memberMapping;
            }

            if (list1.Length > 0)
            {
                list1 += ",";
            }

            if (isInsert)
            {
                if (!memberMapping.ColumnAttribute.IsPrimaryKey)
                {
                    list1 += memberMapping.ResolvedName;

                    if (list2.Length > 0)
                    {
                        list2 += ",";
                    }

                    list2 += ":p_" + memberMapping.ResolvedName;
                }
            }
            else
            {
                if (memberMapping.ColumnAttribute.IsPrimaryKey)
                {
                    if (list2.Length > 0)
                    {
                        list2 += " and ";
                    }

                    list2 += string.Format("{0} = :p_{0}", memberMapping.ResolvedName);
                }
                else
                {
                    list1 += string.Format("{0} = :p_{0}", memberMapping.ResolvedName);
                }
            }

            if (!isInsert || (isInsert && !(memberMapping.ColumnAttribute.IsPrimaryKey && memberMapping.ColumnAttribute.IsAutoGenerated)))
            {
                command.Parameters.Add(":p_" + memberMapping.ResolvedName, memberMapping.GetValue(obj));
            }
        }

        string sql;

        if (isInsert)
        {
            sql = string.Format("insert into {0} ({1}) values ({2})", mapping.ResolvedName, list1, list2);
        }
        else
        {
            sql = string.Format("update {0} set {1} where {2}", mapping.ResolvedName, list1, list2);
        }

        command.CommandText = sql;
        LastSqlCommandText  = command.CommandText;

        command.ExecuteNonQuery();

        if (isInsert && autoIncPrimaryKeyMapping != null)
        {
            object lastAutoInc;

            if (autoIncPrimaryKeyMapping.MemberType == typeof(int))
            {
                lastAutoInc = command.LastAutoinc;
            }
            else if (autoIncPrimaryKeyMapping.MemberType == typeof(uint))
            {
                lastAutoInc = (uint)command.LastAutoinc;
            }
            else if (autoIncPrimaryKeyMapping.MemberType == typeof(long))
            {
                lastAutoInc = (long)command.LastAutoinc;
            }
            else if (autoIncPrimaryKeyMapping.MemberType == typeof(ulong))
            {
                lastAutoInc = (ulong)command.LastAutoinc;
            }
            else
            {
                throw new NotImplementedException("The type of the primary key is not supported for auto-incrementation");
            }

            autoIncPrimaryKeyMapping.SetValue(obj, lastAutoInc);
        }
    }
Exemplo n.º 7
0
    public void Fill <T>(DataSet dataSet, int?topCount, string sqlFilterExpression, string sqlOrderExpression) where T : class
    {
        AdsEntityMapping mapping = AdsEntityMapping.GetForType(typeof(T));

        Fill <T>(mapping, dataSet, topCount, sqlFilterExpression, sqlOrderExpression);
    }
Exemplo n.º 8
0
    protected void Fill <T>(AdsEntityMapping mapping, DataSet dataSet, int?topCount, string sqlFilterExpression, string sqlOrderExpression) where T : class
    {
        DataTable table = new DataTable(mapping.ResolvedName);

        foreach (var member in mapping.Members)
        {
            DataColumn column = new DataColumn(member.ResolvedName);

            if (member.MemberType.IsGenericType)
            {
                Type genericTypeDef = member.MemberType.GetGenericTypeDefinition();

                if (genericTypeDef == typeof(Nullable <>))
                {
                    column.AllowDBNull = true;
                    column.DataType    = member.MemberType.GetGenericArguments()[0];
                }
            }
            else
            {
                if (member.MemberType.IsValueType)
                {
                    column.AllowDBNull = false;
                }
                else
                {
                    column.AllowDBNull = member.ColumnAttribute.IsNullable;
                }

                column.DataType = member.MemberType;
            }

            table.Columns.Add(column);
        }

        AdsCommand command = new AdsCommand(CreateSelectQuery <T>(mapping, topCount, sqlFilterExpression, sqlOrderExpression), connection);

        AdsDataAdapter adapter = new AdsDataAdapter(command);

        LastSqlCommandText = command.CommandText;

        adapter.Fill(table);

        if (IsAutoTrimmingEnabled)
        {
            foreach (var member in mapping.Members)
            {
                string name = member.ResolvedName;

                if (member.MemberType == typeof(string) && member.ColumnAttribute.IsAutoTrimmingEnabled)
                {
                    foreach (DataRow row in table.Rows)
                    {
                        if (!row.IsNull(name))
                        {
                            row[name] = ((string)row[name]).TrimEnd();
                        }
                    }
                }
            }
        }

        dataSet.Merge(table);
    }
Exemplo n.º 9
0
    public T Get <T>(object key) where T : class
    {
        AdsEntityMapping mapping = AdsEntityMapping.GetForType(typeof(T));

        var primaryKeyMappings = new List <AdsEntityMemberMapping>();

        foreach (AdsEntityMemberMapping memberMapping in mapping.Members)
        {
            if (memberMapping.ColumnAttribute.IsPrimaryKey)
            {
                primaryKeyMappings.Add(memberMapping);
            }
        }

        if (primaryKeyMappings.Count == 0)
        {
            throw new AdsContextException("No primary key is defined for the class");
        }

        if (primaryKeyMappings.Count > 1)
        {
            throw new AdsContextException("Multiple primary key columns are not supported");
        }

        AdsEntityMemberMapping primaryKeyMapping = primaryKeyMappings[0];

        string selectFilter = string.Format("{0} = :p_key", primaryKeyMapping.ResolvedName);;

        string query = CreateSelectQuery <T>(mapping, null, selectFilter, null);

        AdsCommand command = new AdsCommand(query, connection);

        command.Parameters.Add(":p_key", key);

        AdsDataReader reader = command.ExecuteReader();

        if (reader.HasRows && reader.Read())
        {
            T obj = (T)Activator.CreateInstance(typeof(T));

            foreach (AdsEntityMemberMapping memberMapping in mapping.Members)
            {
                int resolvedNameOrdinal = reader.GetOrdinal(memberMapping.ResolvedName);

                object value = null;

                if (!reader.IsDBNull(resolvedNameOrdinal))
                {
                    value = reader.GetValue(resolvedNameOrdinal);

                    if (memberMapping.MemberType == typeof(uint) && value is int)
                    {
                        value = (uint)(int)value;
                    }

                    if (memberMapping.MemberType == typeof(ushort) && value is short)
                    {
                        value = (ushort)(short)value;
                    }
                }

                memberMapping.SetValue(obj, value);
            }

            return(obj);
        }

        return(null);
    }