首頁  >  文章  >  後端開發  >  .NET框架-應用特性和反射檢查資料唯一性的範例程式碼

.NET框架-應用特性和反射檢查資料唯一性的範例程式碼

黄舟
黄舟原創
2017-03-20 11:45:151720瀏覽

反射與特性

#   .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

以上是.NET框架-應用特性和反射檢查資料唯一性的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn