一般的な反射共通アプリケーション、CRUDを達成反射することによって、タイプによってインスタンスを作成します

テストクラスパブリック
    { 


        クラス:Tこのmyobjの公共ボイド<T>()
        { 
            //新しい新しいT T = T()
            T = System.Activator.CreateInstance T <T>(); 
            //を有する型を得るためのフィールドを取得しますそれに対応する名前フィールドとメソッド
        } 
    }

  

ジェネリック型のインスタンスによって作成されたマイクロチャネル公式エンティティを作成する方法、
System.Activator.CreateInstance <T>は();





を追加しました:
パブリック静的ボイド追加<T>(Tモデル)
        { 
            タイプT = typeof演算(T)。
            文字列テーブル名= GetTableName(T)。
            PropertyInfo [] PPS = t.GetProperties()。
            StringBuilderのSB =新しいStringBuilderの+テーブル名+ "(")( "への挿入"; 
            のStringBuilder sbColumns =新規のStringBuilder(); 
            のStringBuilder sbValues =新規のStringBuilder(); 
            PP内のforeach(PropertyInfoアイテム)
            { 
                (IsNotMapper(項目)場合&&! !IsKeyが(アイテム))
                { 
                    sbColumns.Append(item.Name + ""); 
                    (IsNoStr(item.PropertyType場合))
                    {
                        
                        IF(item.GetValue(モデル)== NULL || string.IsNullOrEmpty(item.GetValue(モデル).ToString()))
                        { 
                            sbValues.Append( "NULL"); 
                        } 
                        { 
                            
                            IF(IsBoolean(item.PropertyType))
                            { 
                                BOOL bvalue =(BOOL)item.GetValue(モデル)。
                                sbValues.Append((bvalue 1:0)+ ""?)。
                            } 
                            { 
                                sbValues.Append(item.GetValue(モデル)+ "" 
                            } 
                            
                        }
                    } 
                    { 
                        sbValues.Append( " '" + item.GetValue(モデル)+ "'、")。
                    } 
                    
                } 
            } 
            文字列のSQL = String.Formatの+テーブル名+ "({0})の値({1})"、sbColumns.ToString()。TrimEnd( '')、sbValues.ToString()( "への挿入"。 TrimEnd( '')); 
            connection.Execute(SQL)。
        }

  




レビュー:
パブリック静的ボイド更新<T>(Tモデル)
        { 
            T = typeof演算(T)を入力します。
            文字列テーブル名= GetTableName(T)。
            PropertyInfo [] PPS = t.GetProperties()。
            StringBuilderのSB =新しいStringBuilderの(); 
            文字列=「」; 
            foreachの(PPSでPropertyInfoアイテム)
            { 
                IF(IsNotMapper(アイテム)!)
                { 
                    ストリング列= item.Name。
                    文字列値= item.GetValue(モデル).ToString(); 
                    (もし!IsKeyが(アイテム))
                    { 
                        場合(IsNoStr(item.PropertyType)) 
                        {
                            IF(IsBoolean(item.PropertyType))
                            { 
                                BOOL bvalue =(BOOL)item.GetValue(モデル)。
                                値= bvalue?"1": "0"; 
                            } 
                            sb.Append(カラム+ "=" +値+ ""); 
                        } 
                        { 
                            sb.Append(カラム+ "= '" +値+ "'")。
                        } 
                    } 
                    { 
                        ここ=カラム+ "=" +値; 
                    }
                } 
            } 

            文字列のSQL = String.Formatの( "更新{0}は集合{1} {2}"、テーブル名、sb.ToString()TrimEnd( '')); 
        }

  

 

 

 

削除:

パブリック静的ボイド削除<キー、T>(キーID)
        { 
            タイプTP = typeof演算(T)。
            PropertyInfo [] PPS = tp.GetProperties()。
            文字列のキー名=「」; 
            キー値= ID; 
            foreachの(PPSでPropertyInfoアイテム)
            { 
                IF(IsNotMapper(アイテム)&& IsKeyが(アイテム)!)
                { 
                    キー名= item.Name。
                } 
            } 
            もし(IsNoStr(typeof演算(キー)))
            { 
                文字列のSQL = "削除" + GetTableName(TP)+ "" +キー名+ "=" +値。
            } 
                文字列のSQL = "削除" + GetTableName(TP)+ "" +キー名+ "= '" +バリュー+ "'"; 
            } 
        }

  

 

備えるフィールドまたはクラス特性の分析:

/// <要約> 
        ///是否包含该特性
        /// </要約> 
        /// <PARAM NAME = "項目"> </ PARAM> 
        /// <PARAM NAME = "TP"> </ PARAM> 
        /// <戻る> </戻り> 
        プライベート静的ブールIsAttribute(PropertyInfo項目、タイプTP)
        { 
            VAR ATTR = item.GetCustomAttributes(TP、TRUE)。
            (attr.Length <= 0)であれば
                、リターンはfalse; 
            trueを返します。
        }

  

 

 

指定された属性値を把持する(例えば、テーブル名は、サブセクションでは、他の特別な特性を記述する)。

/// <要約> 
        ///查询表名
        /// </要約> 
        ///ます。<param name = "T"> </ param>の
        /// <リターン> </リターン> 
        プライベート静的文字列GetTableName(タイプT)
        { 
            文字列名= t.Name。
            オブジェクト[] OS = t.GetCustomAttributes(typeof演算(TablNameAttribute)、TRUE)。
            IF(os.Length> 0)
            { 
                TablNameAttributeとしてTablNameAttribute TA = OS [0]。
                名前= ta.TableName。
            } 
            名を返します。
        }

  

 


ジェネリック医薬品は、我々が頻繁に使用されるシステムアーキテクチャに必要を行うときに巧みプロジェクトに適用された場合、制約および事業開発のための制御の役割を担うことができる反映されます。












おすすめ

転載: www.cnblogs.com/DavidHuAtIT/p/12150003.html