using System; using System.Data; using System.Data.SqlClient; using Csla; using Csla.Data; namespace ProjectTracker.Library { [Serializable()] public class RoleList : NameValueListBase { #region Business Methods public static int DefaultRole() { RoleList list = GetList(); if (list.Count > 0) return list.Items[0].Key; else throw new NullReferenceException( "No roles available; default role can not be returned"); } #endregion #region Factory Methods private static RoleList _list; /// /// Returns a list of roles. /// public static RoleList GetList() { if (_list == null) _list = DataPortal.Fetch (new Criteria(typeof(RoleList))); return _list; } /// /// Clears the in-memory RoleList cache /// so the list of roles is reloaded on /// next request. /// public static void InvalidateCache() { _list = null; } private RoleList() { /* require use of factory methods */ } #endregion #region Data Access private void DataPortal_Fetch(Criteria criteria) { this.RaiseListChangedEvents = false; using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection)) { cn.Open(); using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "getRoles"; using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) { IsReadOnly = false; while (dr.Read()) { this.Add(new NameValuePair( dr.GetInt32("id"), dr.GetString("name"))); } IsReadOnly = true; } } } this.RaiseListChangedEvents = true; } #endregion } }