首頁 > 後端開發 > C#.Net教程 > C# 反射與特性查重的詳細介紹

C# 反射與特性查重的詳細介紹

黄舟
發布: 2017-03-04 11:09:11
原創
1736 人瀏覽過

反射與特性

  .net framework提供的反射和特性技術,可用來檢查資料重複性,決定是否寫入資料庫表中是否寫入某條資料。

需求

  某個實體寫入資料庫到資料庫時,很多時候,需要檢查這條資料是不是一條重複數據,例如新建的人員,假定ID號碼不能重複,此時新建的這個人員ID號碼與人員表中的一條或多條重複了,此時需要給出提示或採取其他手段,例如更新,或刪除等。

方法

  在這種需求場景下,可以利用.net framework提供的特性與反射技術,解決此類需求。具體過程,

  其次,在實體類別中引用剛寫好的特性類別建構出其唯一識別(一個或多個屬性組合);
  
  最後,檢查資料重複性時,運用Attribute提供的方法,取得每個實體類別的唯一性識別屬性(一個或多個)。
  
  Attribute[] GetCustomAttributes(modeltype, inherit);

KeyFieldAttribute 特性類別

     public class KeyFieldAttribute:Attribute
     {        private static List<string> keyfields = new List<string>();        
     /// <summary>
        /// 构造关键属性
        /// </summary>
        /// <param name="fields"></param>
        public KeyFieldAttribute(params string[] fields)
        {            foreach (string kf in fields)
            {                if (!keyfields.Contains(kf))
                    keyfields.Add(kf);
            }

        }        public static List<string> KeyFields
        {            get { return keyfields; }
        }
    }
登入後複製

KeyFieldAttribute 特性類別

[KeyField("ID")]public class Person
{  public int ID {get;set;} //人员ID
  public string Name {get;set;}//人员名称
  public DateTime BirthDate {get;set;} //出生年月日}

    [KeyField("RoleGroupID","RoleCode")]    public class Role
    {        public int RoleGroupID { get; set; } //角色组别ID
        public string RoleCode { get; set; } //角色编号
        public string RoleName { get; set; }//角色名称
    }
登入後複製

Model

##

            KeyFieldAttribute.GetCustomAttributes(typeof(Person), true);
            List<string> fields = KeyFieldAttribute.KeyFields; //获取到Person实体的唯一标识属性ID

            KeyFieldAttribute.GetCustomAttributes(typeof(Role), true);            
            var fields = KeyFieldAttribute.KeyFields;//Role实体唯一属性,2个属性组合:RoleGroupID,RoleCode
登入後複製

  注意特性擴充類,此處是KeyFieldAttribute中的後綴Attribute是可以省略的,因此KeyField是簡寫,相當於KeyFieldAttribute。


運用特性類別:

/// <summary>/// 检索应用于类型的成员的自定义特性的数组。
/// </summary>/// <param name="modeltype">要搜索的自定义特性的类型</param>
///<param name="inherit">是否搜索成员的祖先</param>
/// <returns>自定义特性的数组</returns>Attribute[] GetCustomAttributes(modeltype, inherit);
登入後複製

  利用特性傳回的關鍵屬性組合,在資料庫中查詢數據,如果能查到至少一筆記錄,則按照一定的邏輯處理; 如果不能,則可以直接寫入新資料。 Attribute類別中提供的方法說明:
rrreee

 以上就是C# 反射與特性查重的詳細介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)! ################
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板