using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; using Csla; using System.Data; using Csla.Data; using System.IO; using log4net; [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace Volian.CSLA.Library { [Serializable()] public class VEReadOnlyListBase : ReadOnlyListBase where T : VEReadOnlyListBase where C : VEReadOnlyBase, new() { #region Log4Net protected static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); #endregion #region Authorization Rules public static bool CanGetObject() { // TODO: customize to check user role //return ApplicationContext.User.IsInRole(""); return true; } #endregion #region Generic Factory Methods public static T Get(int id) { return DataPortal.Fetch(new Criteria(id)); } protected VEReadOnlyListBase() { /* require use of factory methods */ } #endregion #region Generic Data Access [Serializable()] protected class Criteria { private int _id; public int Id { get { return _id; } } public Criteria(int id) { _id = id; } } protected void DataPortal_Fetch(Criteria criteria) { this.RaiseListChangedEvents = false; // if (log.IsDebugEnabled) log.Debug(this.GetType().ToString()); try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { using (SqlCommand cm = cn.CreateCommand()) { SetupSelect(cm, criteria); SqlDataReader drRaw = cm.ExecuteReader(); using (SafeDataReader dr = new SafeDataReader(drRaw)) { IsReadOnly = false; while (dr.Read()) { CreateItem(dr); } IsReadOnly = true; } } } } catch (Exception ex) { //System.Diagnostics.StackFrame[] sf = new System.Diagnostics.StackTrace().GetFrames(); //string sMsg = string.Format("{0}.{1} Exception: {2} \r\n Message: {3}\r\n Inner Exception:{4}", // this.GetType().ToString(), sf[0].GetMethod().Name, // ex.GetType().ToString(), ex.Message, ex.InnerException); //System.Diagnostics.EventLog.WriteEntry("VEReadOnlyListBase", sMsg); //Console.WriteLine(sMsg); if(log.IsErrorEnabled)log.Error("Fetch Error", ex); } this.RaiseListChangedEvents = true; } #endregion #region Item Specific Virtual Data Access protected virtual void SetupSelect(SqlCommand cm, Criteria criteria) { ;} protected virtual void CreateItem(SafeDataReader dr) { ;} #endregion } }