一个基于封装CSLA框架后,设计业务类的例子:User

来源:互联网 发布:传奇霸业数据汇总 编辑:程序博客网 时间:2024/05/01 12:38

  /// <summary>
  /// 用户
  /// </summary>
  [Serializable()]
  [Phenix.Core.Data.MapperClass("PH_User", CheckDirtyOnUpdate = true)]
  [Phenix.Core.Log.PermanentExecuteActionLog(Phenix.Core.Log.PermanentExecuteAction.UpdateAndDelete)]
  [Phenix.Core.Log.PermanentRenovateLog]
  public class User : Phenix.Business.BusinessBase<User>
  {
    #region 属性

    public InvestRoles InvestRoles
    {
      get
      {
        return GetDetail<InvestRoles, InvestRole>();
      }
    }

    [Phenix.Core.Data.MapperField(ColumnName = "US_ID", IsPrimaryKey = true)]
    private long _id = Sequence.NextValue();
    /// <summary>
    /// 主键
    /// </summary>
    public long Id
    {
      get { return _id; }
    }

    private static PropertyInfo<string> UserNameProperty =
      RegisterProperty<string>(typeof(User), new PropertyInfo<string>("UserName", "姓名"));
    [Phenix.Core.Data.MapperField(ColumnName = "US_Name", NeedUpdate = true, CheckDirtyOnUpdate = true)]
    private string _userName = UserNameProperty.DefaultValue;
    /// <summary>
    /// 姓名
    /// </summary>
    public string UserName
    {
      get
      {
        return GetProperty<string>(UserNameProperty, _userName);
      }
      set
      {
        SetProperty<string>(UserNameProperty, ref _userName, value);
      }
    }

    private static PropertyInfo<string> UserNumberProperty =
      RegisterProperty<string>(typeof(User), new PropertyInfo<string>("UserNumber", "工号"));
    [Phenix.Core.Data.MapperField(ColumnName = "US_UserNumber", NeedUpdate = true)]
    private string _userNumber = UserNumberProperty.DefaultValue;
    /// <summary>
    /// 登录工号
    /// </summary>
    [Indexable(IndexModeEnum.IndexModeOnDemand)]
    public string UserNumber
    {
      get
      {
        return GetProperty<string>(UserNumberProperty, _userNumber);
      }
      set
      {
        SetProperty<string>(UserNumberProperty, ref _userNumber, value);
      }
    }

    private static PropertyInfo<string> PasswordProperty =
      RegisterProperty<string>(typeof(User), new PropertyInfo<string>("Password", "口令"));
    [Phenix.Core.Data.MapperField(ColumnName = "US_Password", NeedUpdate = true)]
    private string _password = PasswordProperty.DefaultValue;
    /// <summary>
    /// 登录口令
    /// </summary>
    public string Password
    {
      get
      {
        return GetProperty<string>(PasswordProperty, _password);
      }
      set
      {
        SetProperty<string>(PasswordProperty, ref _password, value);
      }
    }

    #endregion

    #region 过程

    #region Validation Rules

    protected override void AddBusinessRules()
    {
      base.AddBusinessRules();
      this.ValidationRules.AddRule<User>(NoDuplicates, UserNumberProperty);
    }

    private static bool NoDuplicates(User target, Csla.Validation.RuleArgs e)
    {
      Users parent = (Users)target.Parent;
      if (parent != null)
      {
        var query = from item in parent
                    where item.UserNumber == target.UserNumber && !ReferenceEquals(item, target)
                    select item;
        if (query.Count<User>() != 0)
        {
          e.Description = "登录工号不允许重复";
          return false;
        }
      }
      return true;
    }

    #endregion

    #region Authorization Rules

    #endregion

    #endregion
  }
}