一个基于封装CSLA框架后,设计业务类的例子:User .
2012-01-14 09:48
676 查看
/// <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
}
}
/// 用户
/// </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
}
}
相关文章推荐
- 一个基于封装CSLA框架后,设计业务类的例子:User
- 一个基于封装CSLA框架后,设计业务类的例子:users .
- 一个基于封装CSLA框架后,设计业务类的例子:users
- 精心设计的基于组件的C# Win Forms实践 一个框架数据库驱动多个业务逻辑数据库
- 精心设计的基于组件的C# Win Forms实践 一个框架数据库驱动多个业务逻辑数据库
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- Aforge.net 一个专门为开发者和研究者基于C#框架设计
- 一个基于GLide加载图片的封装开源框架
- 优雅设计封装基于Okhttp3的网络框架(四):多线程下载添加数据库支持(greenDao)及 进度更新
- 优雅设计封装基于Okhttp3的网络框架(六):HttpHeader接口设计实现 及 Response、Request封装实现
- AForge.NET是一个专门为开发者和研究者基于C#框架设计的视频录像
- AForge.NET是一个专门为开发者和研究者基于C#框架设计的视频录像
- 分享一个基于winForm后台单线程推送多线程并行处理业务的小程序框架
- 【Yom框架】漫谈个人框架的设计之三:业务接口+UI层的设计(基于Castle实现的Repository)
- 关于[一个基于WF的业务流程平台]表设计的说明
- 分享一个基于winForm后台单线程推送多线程并行处理业务的小程序框架
- 基于retrofit的网络框架的终极封装(一):第一层(参数组装层)的API设计
- iOS-基于AVPlayer的视频播放器代码封装-0-需求分析与框架设计阶段
- 基于ACE设计一个c++网络游戏服务器框架引擎
- 优雅设计封装基于Okhttp3的网络框架(二):多线程下载功能原理设计 及 简单实现