89 lines
1.9 KiB
C#

using System;
using System.Data;
using System.Data.SqlClient;
using Csla;
using Csla.Data;
namespace ProjectTracker.Library
{
[Serializable()]
public class RoleList :
NameValueListBase<int, string>
{
#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;
/// <summary>
/// Returns a list of roles.
/// </summary>
public static RoleList GetList()
{
if (_list == null)
_list = DataPortal.Fetch<RoleList>
(new Criteria(typeof(RoleList)));
return _list;
}
/// <summary>
/// Clears the in-memory RoleList cache
/// so the list of roles is reloaded on
/// next request.
/// </summary>
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
}
}