Beispiel #1
0
        /// <summary>
        ///     Set a attribute on a property
        /// </summary>
        /// <typeparam name="TProp"></typeparam>
        public void SetPropertyAttribute <TProp>(Expression <Func <T, TProp> > exp, DataAccessAttribute attribute)
        {
            var info = exp.GetPropertyInfoFromLamdba();
            var fod  = ClassInfoCache.Propertys.First(s => s.Key == info).Value;

            fod.Attributes.Add(new DbAttributeInfoCache(attribute));
        }
Beispiel #2
0
        /// <summary>
        ///     set a Attribute on a method
        /// </summary>
        /// <typeparam name="TProp"></typeparam>
        public void SetMethodAttribute <TProp>(Expression <Func <T, TProp> > exp, DataAccessAttribute attribute)
        {
            var info = exp.GetMehtodInfoFromLabda();
            var fod  = ClassInfoCache.Mehtods.First(s => s.MethodName == info);

            fod.Attributes.Add(new DbAttributeInfoCache(attribute));
        }
Beispiel #3
0
    /// <summary>
    /// Conditional statement (in) additional configuration
    /// 条件文(in)追加設定
    /// </summary>
    /// <param name="column"></param>
    /// <param name="values"></param>
    /// <param name="type"></param>
    /// <param name="isAnd"></param>
    /// <param name="equal"></param>
    public void AddInCondition(string column, string[] values, Type type, bool isAnd, bool equal = true)
    {
        if (values == null)
        {
            return;
        }
        this.AddOperator(isAnd);
        DataAccessAttribute attribute = this.GetDataAccessAttribute <DataAccessAttribute>(type);

        AddInConditionValue(column, attribute, values, equal);
    }
Beispiel #4
0
    /// <summary>
    /// Additional configuration conditional statement
    /// 条件文追加設定
    /// </summary>
    /// <param name="column"></param>
    /// <param name="value"></param>
    /// <param name="type"></param>
    /// <param name="isAnd"></param>
    /// <param name="equal"></param>
    public void AddCondition(string column, object value, Type type, bool isAnd, bool equal)
    {
        if (value == null)
        {
            return;
        }
        this.AddOperator(isAnd);
        DataAccessAttribute attribute = this.GetDataAccessAttribute <DataAccessAttribute>(type);

        AddConditionValue(column, attribute, value.ToString(), equal);
    }
Beispiel #5
0
    /// <summary>
    /// Condition value setting
    /// 条件値設定
    /// </summary>
    /// <param name="column"></param>
    /// <param name="attribute"></param>
    /// <param name="value"></param>
    /// <param name="equal"></param>
    private void AddConditionValue(string column, DataAccessAttribute attribute, string value, bool equal)
    {
        value = this.EscapeSingleQuotation(value.ToString());

        if (equal)
        {
            WhereSql.AppendLine(string.Format("{0}.{1} = '{2}'", attribute.TableName, column, value.ToString()));
        }
        else
        {
            WhereSql.AppendLine(string.Format("{0}.{1} != '{2}'", attribute.TableName, column, value.ToString()));
        }
    }
Beispiel #6
0
    /// <summary>
    /// Select SQL statement generation
    /// セレクトSQL文生成
    /// </summary>
    private void CreateSelectSql()
    {
        this.ExecutetSql = new StringBuilder();
        DataAccessAttribute attribute = this.GetDataAccessAttribute <DataAccessAttribute>(this.BaseType);

        ExecutetSql.AppendLine(string.Format(SELECT_SQL, this.CreateSelectColumn(), attribute.TableName));
        ExecutetSql.AppendLine(this.JoinSql.ToString());
        ExecutetSql.AppendLine(this.WhereSql.ToString());

        if (!this.OrderByColumns.Length.Equals(0))
        {
            ExecutetSql.AppendLine(string.Format(ORDER_BY_SQL, string.Join(",", this.OrderByColumns)));
        }
        Debug.Log(this.ExecutetSql.ToString());
    }
Beispiel #7
0
    /// <summary>
    /// Condition value (in) setting
    /// 条件値(in)設定
    /// </summary>
    /// <param name="column"></param>
    /// <param name="attribute"></param>
    /// <param name="values"></param>
    /// <param name="equal"></param>
    private void AddInConditionValue(string column, DataAccessAttribute attribute, string[] values, bool equal)
    {
        for (int i = 0; i < values.Length; i++)
        {
            values[i] = EscapeSingleQuotation(values[i]);
        }

        if (equal)
        {
            WhereSql.AppendLine(string.Format("{0}.{1} in ({2})", attribute.TableName, column, string.Format("'{0}'", string.Join("','", values))));
        }
        else
        {
            WhereSql.AppendLine(string.Format("{0}.{1} not in ({2})", attribute.TableName, column, string.Format("'{0}'", string.Join("','", values))));
        }
    }
Beispiel #8
0
    /// <summary>
    /// Add join table (And join only )
    /// 結合テーブル追加 (And結合のみ)
    /// </summary>
    /// <param name="baseType"></param>
    /// <param name="joinColumns">The same name row ,同名列</param>
    /// <param name="isInner"></param>
    public void AddJoinTable(Type baseType, Type joinType, string[] joinColumns, bool isInner = true)
    {
        DataAccessAttribute attribite = this.GetDataAccessAttribute <DataAccessAttribute>(joinType);
        string        tableName       = this.GetDataAccessAttribute <DataAccessAttribute>(baseType).TableName;
        string        joinTableType   = (isInner) ? "inner" : "left";
        StringBuilder joinConditions  = new StringBuilder();

        for (int i = 0; i < joinColumns.Length; i++)
        {
            if (i.Equals(0))
            {
                joinConditions.Append(" and ");
            }
            joinConditions.Append(string.Format("{0}.{1} = {2}.{3}", tableName, joinColumns[i], attribite.TableName, joinColumns[i]));
        }

        JoinSql.AppendLine(string.Format("{0} join {1} on {2}", joinTableType, attribite.TableName, joinConditions.ToString()));

        this.AddSelectType(joinType);
    }
Beispiel #9
0
        /// <summary>
        /// 扫描DataAccess特性的类,并创建实例。
        /// </summary>
        /// <param name="dlls">指定的要被扫描的dll。</param>
        private void ScanDataAccessAttribute(string[] dlls)
        {
            foreach (string dll in dlls)
            {
                Assembly assembly = Assembly.LoadFile(dll);
                Type[]   types    = assembly.GetTypes();
                foreach (Type clazz in types)
                {
                    if (clazz.IsClass)
                    {
                        //1.扫描类的DataAccess特性
                        //获取属性
                        Attribute attributeDataAccessAttribute = clazz.GetCustomAttribute(typeof(DataAccessAttribute));
                        if (attributeDataAccessAttribute == null)//如果该类没有DataAccess特性
                        {
                            continue;
                        }
                        DataAccessAttribute dataAccessAttribute = (DataAccessAttribute)attributeDataAccessAttribute;
                        string dataAccessName = clazz.Name.Substring(0, 1).ToLower() + (clazz.Name.Length > 1 ? clazz.Name.Substring(1) : string.Empty);
                        if (!string.IsNullOrWhiteSpace(dataAccessAttribute.Name))//如果设置了DataAccessAttribute的Name值
                        {
                            dataAccessName = dataAccessAttribute.Name;
                        }
                        if (BeanContainer.ContainsKey(dataAccessName))
                        {
                            throw new BeanCreationException(string.Format("不能创建‘{0}’,已经存在该实例。", dataAccessName));
                        }

                        //添加实例到容器中
                        object clazzInstance = Activator.CreateInstance(clazz);//创建类的实例
                        BeanContainer.Add(dataAccessName, new BeanInfo()
                        {
                            Bean = clazzInstance, AtrributeType = AtrributeType.DataAccess
                        });
                    } //end : if (clazz.IsClass)
                }     //end : foreach (Type clazz in types)
            }         //end : foreach (string dll in dlls)
        }
Beispiel #10
0
        /// <summary>
        ///     set a Attribute on a method
        /// </summary>
        public void SetMethodAttribute(string info, DataAccessAttribute attribute)
        {
            var fod = ClassInfoCache.Mehtods.First(s => s.MethodName == info);

            fod.Attributes.Add(new DbAttributeInfoCache(attribute));
        }
Beispiel #11
0
        /// <summary>
        ///     Set a attribute on a property
        /// </summary>
        public void SetPropertyAttribute(string info, DataAccessAttribute attribute)
        {
            var fod = ClassInfoCache.Propertys.First(s => s.Key == info).Value;

            fod.Attributes.Add(new DbAttributeInfoCache(attribute));
        }
Beispiel #12
0
 /// <summary>
 ///     set a Attribute on a class
 /// </summary>
 public void SetClassAttribute(DataAccessAttribute attribute)
 {
     ClassInfoCache.Attributes.Add(new DbAttributeInfoCache(attribute));
 }