CSLA.Net学习(2)

 采用CSLA.net 2.1.4.0版本的书写方式:

  1 using System;

  2 using System.ComponentModel;

  3 using Csla.Validation;

  4 using System.Data.OleDb;

  5 using DBDemo.DbUtility;

  6 using System.Data;

  7 

  8 namespace DBDemo.MVC.Model

  9 {

 10     class Student:Csla.BusinessBase<Student>

 11     {

 12          #region Business Properties and Methods

 13 

 14         private int _id = 0;

 15         [DisplayNameAttribute("ID"), DescriptionAttribute("ID")]

 16         public int ID

 17         {

 18             get

 19             {

 20                 CanReadProperty("ID", true);

 21                 return _id;

 22             }

 23         }

 24 

 25         private string _name = "<空>";

 26         [DisplayNameAttribute("姓名"), DescriptionAttribute("姓名")]

 27         public string Name

 28         {

 29             get

 30             {

 31                 CanReadProperty("Name", true);

 32                 return _name;

 33             }

 34             set

 35             {

 36                 CanWriteProperty("Name", true);

 37                 if (value == null) value = string.Empty;

 38                 if (_name != value)

 39                 {

 40                     _name = value.Trim();

 41                     PropertyHasChanged("Name");

 42                 }

 43             }

 44         }

 45 

 46         private int _age = 1;

 47         [DisplayNameAttribute("年龄"), DescriptionAttribute("年龄")]

 48         public int Age

 49         {

 50             get

 51             {

 52                 CanReadProperty("Age", true);

 53                 return _age;

 54             }

 55             set

 56             {

 57                 CanWriteProperty("Age", true);                

 58                 if (_age != value)

 59                 {

 60                     _age = value;

 61                     PropertyHasChanged("Age");

 62                 }

 63             }

 64         }

 65 

 66        

 67         private DateTime _birth = DateTime.Now;

 68         [DisplayNameAttribute("生日"), DescriptionAttribute("生日")]

 69         public DateTime Birth

 70         {

 71             get

 72             {

 73                 CanReadProperty("Birth", true);

 74                 return _birth;

 75             }

 76             set

 77             {

 78                 CanWriteProperty("Birth", true);

 79                 if (_birth != value)

 80                 {

 81                     _birth = value;

 82                     PropertyHasChanged("Birth");

 83                 }

 84             }

 85         }

 86        

 87         protected override object GetIdValue()

 88         {

 89             return _id;

 90         }

 91 

 92         #endregion //Business Properties and Methods

 93 

 94         #region Validation Rules

 95         private void AddCustomRules()

 96         {

 97             //add custom/non-generated rules here...

 98         }

 99 

100         private void AddCommonRules()

101         {

102             //

103             // Name

104             //

105             ValidationRules.AddRule(CommonRules.StringRequired, "Name");

106             ValidationRules.AddRule(CommonRules.StringMaxLength, new CommonRules.MaxLengthRuleArgs("Name", 8));

107             ValidationRules.AddRule(CommonRules.IntegerMinValue, new CommonRules.IntegerMinValueRuleArgs("Age", 0));

108             ValidationRules.AddRule(CommonRules.IntegerMaxValue, new CommonRules.IntegerMaxValueRuleArgs("Age", 120)); 

109         }      

110 

111         protected override void AddBusinessRules()

112         {

113             AddCommonRules();

114             AddCustomRules();

115         }

116         #endregion //Validation Rules

117 

118         #region Authorization Rules

119         protected override void AddAuthorizationRules()

120         {

121             //TODO: Define authorization rules in HPrecision

122             //AuthorizationRules.AllowRead("Code", "HPrecisionReadGroup");

123             

124             //AuthorizationRules.AllowWrite("Name", "HPrecisionWriteGroup");

125             

126         }

127 

128         #endregion //Authorization Rules

129 

130         #region Factory Methods

131         public static Student New()

132         {

133             return new Student();

134         }

135 

136         internal static Student Get(OleDbDataReader row)

137         {

138             Student obj = new Student();

139             obj.Fetch( row );

140             return obj;

141         }

142 

143         private Student()

144         {            

145             MarkAsChild();

146         }

147         

148         #endregion //Factory Methods

149 

150         #region Data Access - Fetch

151         private void Fetch(OleDbDataReader row)

152         {

153             object objv = null;

154             objv = row["ID"];

155             _id = Convert.IsDBNull(objv) ? 0 : Convert.ToInt16(objv);   

156 

157             objv = row["StudentName"];

158             _name = Convert.IsDBNull(objv) ? string.Empty : Convert.ToString(objv);          

159             objv = row["Age"];

160             _age = Convert.IsDBNull(objv) ? 0 : Convert.ToInt32(objv);

161            

162             objv = row["BirthDay"];

163             _birth = Convert.IsDBNull(objv) ? DateTime.MinValue : Convert.ToDateTime(objv);

164            

165             MarkOld();

166 

167             ValidationRules.CheckRules();

168         }            

169         #endregion //Data Access - Fetch

170 

171         #region Data Access - Update,Insert,Delete 

172         internal void Update()

173         {

174             if (!IsDirty) return;

175             if (this.IsDeleted)//删除的记录

176             {

177                 //is deleted object, check if new

178                 if (!this.IsNew)

179                 {

180                    string sqlDelete =string.Format( "delete from [Student] where ID={0} ",_id);

181                     OleDbHelper.ExecuteNonQuery(OleDbHelper.connectionString,CommandType.Text,sqlDelete,null);

182                     MarkNew();

183                 }

184             }

185             else

186             {

187                 if (this.IsNew)//新添加的记录

188                 {                 

189                    string sqlInsert = string.Format("insert into [Student](StudentName,[Age],[BirthDay]) values('{0}',{1},'{2}') ", _name,_age,_birth);

190                    OleDbHelper.ExecuteNonQuery(OleDbHelper.connectionString, CommandType.Text, sqlInsert, null);

191 

192                    //_id =0;

193                     //PropertyHasChanged("ID");

194                 }

195                 else //修改的记录

196                 {

197 

198                     string sqlUpdate = string.Format("update [Student] set StudentName='{0}',Age={1} where ID={2} ",_name,_age, _id);

199                     OleDbHelper.ExecuteNonQuery(OleDbHelper.connectionString, CommandType.Text, sqlUpdate, null);

200                 }

201 

202                 // mark the object as old (persisted)

203                 MarkOld();

204             }             

205         }

206         private void AddParametersValues()

207         {

208            

209 

210             

211         }

212         #endregion //Data Access       

213     }

214 }
Student
  1 using System;

  2 using Csla;

  3 using DBDemo.DbUtility;

  4 using System.Data.OleDb;

  5 

  6 namespace DBDemo.MVC.Model

  7 {

  8     class StudentList:Csla.BusinessListBase<StudentList,Student>

  9     {

 10          protected override object AddNewCore()

 11         {

 12             Student item = Student.New();

 13             Add(item);

 14             return item;

 15         }

 16        

 17 

 18         #region 支持bindingSource的Find方法

 19         protected override bool SupportsSearchingCore

 20         {

 21             get

 22             {

 23                 return true;

 24             }

 25         }

 26 

 27         protected override int FindCore(System.ComponentModel.PropertyDescriptor prop, object key)

 28         {

 29             if (prop.Name == "Name")

 30             {

 31                 for (int i = 0; i < Count; i++)

 32                 {

 33                     if (this[i].Name == (string)key ) return i;

 34                 }

 35             }

 36             else if (prop.Name == "Name")

 37             {

 38                 for (int i = 0; i < Count; i++)

 39                 {

 40                     if (this[i].Name == (string)key ) return i;

 41                 }

 42             }

 43             return -1;

 44         }

 45         #endregion

 46 

 47         #region Authorization Rules

 48 

 49         public static bool CanGetObject()

 50         {

 51             //TODO: Define CanGetObject permission in HPrecisions

 52             return true;

 53             //if (Csla.ApplicationContext.User.IsInRole("HPrecisionsViewGroup"))

 54             //    return true;

 55             //return false;

 56         }

 57 

 58         public static bool CanAddObject()

 59         {

 60             //TODO: Define CanAddObject permission in HPrecisions

 61             return true;

 62             //if (Csla.ApplicationContext.User.IsInRole("HPrecisionsAddGroup"))

 63             //    return true;

 64             //return false;

 65         }

 66 

 67         public static bool CanEditObject()

 68         {

 69             //TODO: Define CanEditObject permission in HPrecisions

 70             return true;

 71             //if (Csla.ApplicationContext.User.IsInRole("HPrecisionsEditGroup"))

 72             //    return true;

 73             //return false;

 74         }

 75 

 76         public static bool CanDeleteObject()

 77         {

 78             //TODO: Define CanDeleteObject permission in HPrecisions

 79             return true;

 80             //if (Csla.ApplicationContext.User.IsInRole("HPrecisionsDeleteGroup"))

 81             //    return true;

 82             //return false;

 83         }

 84         #endregion //Authorization Rules

 85 

 86         #region Factory Methods

 87         private StudentList()

 88         {

 89             AllowNew = true;

 90             AllowRemove = true;

 91             AllowEdit = true;

 92         }

 93 

 94         public static StudentList New()

 95         {

 96             if (!CanAddObject())

 97                 throw new System.Security.SecurityException("You can not add new Hole !");

 98             return new StudentList();

 99         }

100 

101         public static StudentList Get()

102         {

103             if (!CanGetObject())

104                 throw new System.Security.SecurityException("You can not view new Hole !");

105             return DataPortal.Fetch<StudentList>(new Criteria());

106         }        

107         #endregion //Factory Methods

108 

109         #region Data Access

110 

111         #region Filter Criteria

112         [Serializable()]

113         private class Criteria

114         {

115         }

116         #endregion //Filter Criteria

117 

118         #region Data Access - Fetch

119 

120         /// <summary>

121         /// 从Access获取表中所有数据

122         /// </summary>

123         /// <param name="cr">条件</param>

124         private void DataPortal_Fetch(Criteria cr)

125         {

126             RaiseListChangedEvents = false;

127             string sql = "select * from [Student]";

128             OleDbDataReader dr = DbUtility.OleDbHelper.ExecuteReader(OleDbHelper.connectionString, sql);

129             if (dr != null)

130             {

131                 if (dr.HasRows)

132                 {

133                     while (dr.Read())

134                     {

135                         this.Add(Student.Get(dr));

136                     }

137                 }               

138             }

139  

140             RaiseListChangedEvents = true;

141         }

142 

143         protected override void DataPortal_Update()

144         {

145             RaiseListChangedEvents = false;

146             // loop through each deleted child object

147             foreach (Student deletedChild in DeletedList)

148                 deletedChild.Update();

149             DeletedList.Clear();

150 

151             // loop through each non-deleted child object

152             foreach (Student child in this) child.Update();

153 

154             RaiseListChangedEvents = true;

155         }

156         #endregion //Data Access - Update

157         #endregion //Data Access

158     }

159 }
StudentList

采用CSLA.net 3.6版本的书写方式:

  1 using System;

  2 using System.Collections.Generic;

  3 using System.Text;

  4 using Csla;

  5 

  6 namespace BLBTest

  7 {

  8   [Serializable]

  9   public class DataEdit : BusinessBase<DataEdit>

 10   {

 11     int _data;

 12     public int Data

 13     {

 14       [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]

 15       get

 16       {

 17         CanReadProperty(true);

 18         return _data;

 19       }

 20       [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]

 21       set

 22       {

 23         CanWriteProperty(true);

 24         if (!_data.Equals(value))

 25         {

 26           _data = value;

 27           PropertyHasChanged();

 28         }

 29       }

 30     }

 31 

 32     string _name = string.Empty;

 33     public string Name

 34     {

 35       [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]

 36       get

 37       {

 38         CanReadProperty(true);

 39         return _name;

 40       }

 41       [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]

 42       set

 43       {

 44         CanWriteProperty(true);

 45         if (value == null) value = string.Empty;

 46         if (!_name.Equals(value))

 47         {

 48           _name = value;

 49           PropertyHasChanged();

 50         }

 51       }

 52     }

 53 

 54     protected override void AddBusinessRules()

 55     {

 56       ValidationRules.AddRule(

 57         Csla.Validation.CommonRules.MinValue<int>, 

 58         new Csla.Validation.CommonRules.MinValueRuleArgs<int>("Data", 10));

 59 

 60       ValidationRules.AddRule(

 61         Csla.Validation.CommonRules.StringRequired, "Name");

 62     }

 63 

 64     protected override object GetIdValue()

 65     {

 66       return _data;

 67     }

 68 

 69     public DataEdit()

 70     {

 71       MarkAsChild();

 72     }

 73 

 74     public DataEdit(int id, string name)

 75       : this()

 76     {

 77       _data = id;

 78       _name = name;

 79     }

 80 

 81     public int CurrentEditLevel

 82     {

 83       get

 84       {

 85         return EditLevel;

 86       }

 87     }

 88 

 89     public int CurrentEditLevelAdded

 90     {

 91       get

 92       {

 93         Csla.Core.IEditableBusinessObject ebo = (Csla.Core.IEditableBusinessObject)this;

 94         return ebo.EditLevelAdded;

 95       }

 96     }

 97 

 98     protected override void AcceptChangesComplete()

 99     {

100       System.Diagnostics.Debug.WriteLine(string.Format("Acc: {0} ({1}, {2})", _data, CurrentEditLevel, CurrentEditLevelAdded));

101       base.AcceptChangesComplete();

102     }

103 

104     protected override void UndoChangesComplete()

105     {

106       System.Diagnostics.Debug.WriteLine(string.Format("Und: {0} ({1}, {2})", _data, CurrentEditLevel, CurrentEditLevelAdded));

107       base.UndoChangesComplete();

108     }

109 

110     protected override void CopyStateComplete()

111     {

112       System.Diagnostics.Debug.WriteLine(string.Format("Beg: {0} ({1}, {2})", _data, CurrentEditLevel, CurrentEditLevelAdded));

113       base.CopyStateComplete();

114     }

115   }

116 }
DataEdit
 1 using System;

 2 using System.Collections.Generic;

 3 using System.Text;

 4 using Csla;

 5 

 6 namespace BLBTest

 7 {

 8   [Serializable]

 9   public class DataList : BusinessListBase<DataList, DataEdit>

10   {

11     public DataList()

12     {

13       AllowEdit = true;

14       AllowNew = true;

15       AllowRemove = true;

16     }

17 

18     protected override object AddNewCore()

19     {

20       DataEdit item = new DataEdit();

21       Add(item);

22       return item;

23     }

24   }

25 }
DataList
 1 using System;

 2 using System.Collections.Generic;

 3 using System.ComponentModel;

 4 using System.Data;

 5 using System.Drawing;

 6 using System.Text;

 7 using System.Windows.Forms;

 8 

 9 namespace BLBTest

10 {

11   public partial class Form1 : Form

12   {

13     public Form1()

14     {

15       InitializeComponent();

16     }

17 

18     private void Form1_Load(object sender, EventArgs e)

19     {

20       DataList list = new DataList();

21       list.Add(new DataEdit(1, "Rocky"));

22       list.Add(new DataEdit(2, "Fred"));

23       list.Add(new DataEdit(3, "Mary"));

24       list.Add(new DataEdit(4, "George"));

25       list.BeginEdit();

26       this.dataListBindingSource.DataSource = list;

27       this.dataListBindingSource.ListChanged += new ListChangedEventHandler(dataListBindingSource_ListChanged);

28     }

29 

30     void dataListBindingSource_ListChanged(object sender, ListChangedEventArgs e)

31     {

32       System.Diagnostics.Debug.WriteLine(

33         string.Format("{0}: {1}, {2}",e.ListChangedType.ToString(), e.NewIndex, e.OldIndex));

34     }

35 

36     private void toolStripButton1_Click(object sender, EventArgs e)

37     {

38       DataEdit item = new DataEdit(100, "Abdul");

39       ((DataList)this.dataListBindingSource.DataSource)[1] = item;

40       System.Diagnostics.Debug.WriteLine(

41         string.Format("{0}: {1}, {2}", item.Data, item.CurrentEditLevel, item.CurrentEditLevelAdded));

42     }

43 

44     private void toolStripButton2_Click(object sender, EventArgs e)

45     {

46       DataList list = (DataList)this.dataListBindingSource.DataSource;

47       this.dataListBindingSource.CancelEdit();

48       list.CancelEdit();

49       list.BeginEdit();

50     }

51 

52     private void cancelButton_Click(object sender, EventArgs e)

53     {

54       // get business object reference

55       DataList list = (DataList)this.dataListBindingSource.DataSource;

56 

57       // cancel current row

58       this.dataListBindingSource.CancelEdit();

59 

60       // unbind the UI

61       UnbindBindingSource(this.dataListBindingSource);

62 

63       // cancel the list and restart editing

64       list.CancelEdit();

65       list.BeginEdit();

66 

67       // rebind the UI

68       this.dataListBindingSource.DataSource = list;

69     }

70 

71     private void UnbindBindingSource(BindingSource source)

72     {

73       System.ComponentModel.IEditableObject current = 

74         this.dataListBindingSource.Current as System.ComponentModel.IEditableObject;

75       this.dataListBindingSource.DataSource = null;

76       if (current != null)

77         current.EndEdit();

78     }

79   }

80 }
调用代码

 

你可能感兴趣的:(.net)