• 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 }
    调用代码
  • 相关阅读:
    Script to Create Benchmark Procs
    自定义数据类型修改
    需求管理工具试用 – CaliberRM
    标识值重复的原因示例
    Vmware vFabric Suite开始支持自动化部署与PostgreSQL
    在ubuntu上安装Oracle Java SDK
    详解数据中心基础设施的模块化建设
    Xcode 4 无证书真机调试 环境配置
    Calculate_and_Insert_Event_Intervals_in_SQL2005_Profiler
    浏览器工作原理
  • 原文地址:https://www.cnblogs.com/yhlx125/p/3513341.html
Copyright © 2020-2023  润新知