一个基于封装CSLA框架后,设计业务类的例子:User
2008-06-26 16:54
561 查看
/// <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实践 一个框架数据库驱动多个业务逻辑数据库
- 一个基于设计模式的面向对象的框架
- 优雅设计封装基于Okhttp3的网络框架(二):多线程下载功能原理设计 及 简单实现
- 优雅设计封装基于Okhttp3的网络框架(一):Http网络协议与Okhttp3解析
- 业务图形系统框架设计--一个为了减少图形引擎替换工作量的设计
- 汇总:基于SSM封装的一个迅速开发项目的底层框架集成项目
- 分享一个基于winForm后台单线程推送多线程并行处理业务的小程序框架
- [置顶] 优雅设计封装基于Okhttp3的网络框架(完):原生HttpUrlConnction请求、多线程分发 及 数据转换
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- jphone项目设计介绍(一个基于C++的应用程序框架以及软电话和日志服务器应用)
- 对主流框架OKHttp的封装,达到一行代码实现一个业务逻辑
- 优雅设计封装基于Okhttp3的网络框架(五):多线程、单例模式优化 及 volatile、构建者模式使用解析
- 关于[一个基于WF的业务流程平台]表设计的说明
- 一个基于装饰者设计模式的上报框架
- 优雅设计封装基于Okhttp3的网络框架(三):多线程下载功能核心实现 及 线程池、队列机制、终止线程解析
- AForge.NET是一个专门为开发者和研究者基于C#框架设计的视频录像