博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ActiveRecord学习(五):Validation & Transaction
阅读量:6496 次
发布时间:2019-06-24

本文共 2498 字,大约阅读时间需要 8 分钟。

  本文主要包括以下内容:

        1、有效性验证
        2、事务处理
一、Validation(验证)

ActiveRecord自带了数据验证的功能,具体实现是放在实体类的Attribute特性里的,这个时候我们的实体类需要继承ActiveRecordValidationBase 这个类.目前支持以下几种验证:

1、ValidateEmail               验证是否为有效的Email地址

2、ValidateIsUnique          验证是否唯一

3、ValidateRegExp           验证是否匹配输入的正则表达式

4、ValidateNotEmpty        验证是否为空

5、ValidateConfirmation    需要先判断另外一个字段是否通过验证,以确定它本身的验证是否通过

当然AR也支持自定义的验证方法,详细说明请参考:

ActiveRecordValidationBase 这个类还提供了两个方法/属性,以帮助我们获得验证是否通过和错误信息.如下:

1.IsValid(),返回验证是否通过,Bool型

2.ValidationErrorMessages,属性,返回错误信息.

 
[ActiveRecord(
"
companies
"
)]
public
class
Company : Castle.ActiveRecord.ActiveRecordValidationBase {
private
int
_id;
private
int
_pid;
private
string
_cname;
private
string
_type;
public
Company() { }
public
Company(
string
name) {
this
._cname
=
name; } [PrimaryKey]
public
int
Id {
get
{
return
_id;}
set
{_id
=
value;} } [Property,ValidateNotEmpty(
"
上级机构不能为空!
"
)]
public
int
Pid {
get
{
return
_pid;}
set
{_pid
=
value;} } [Property,ValidateNotEmpty(
"
机构名称不能为空!
"
)]
public
string
Cname {
get
{
return
_cname;}
set
{_cname
=
value;} } [Property]
public
string
Type {
get
{
return
_type;}
set
{_type
=
value;} }
}
 
public
void
AddCompany() {
using
(TransactionScope trans
=
new
TransactionScope()) { Company com
=
new
Company(); com.Pid
=
0
; com.Create();
try
{
//
判断验证是否通过
if
(
!
com.IsValid()) {
//
获得错误信息
string
[] errors
=
com.ValidationErrorMessages;
string
esg
=
string
.Empty;
for
(
int
i
=
0
;i
<
errors.Length;i
++
) { esg
+=
errors[i].ToString()
+
"
,
"
; }
throw
new
ApplicationException(esg); } trans.VoteCommit(); }
catch
(Exception e) { trans.VoteRollBack();
throw
new
ApplicationException(e.Message); } }

二、事务处理

AR的事务处理非常的简单,如下:

 
public
void
UseTransaction() {
using
(TransactionScope trans
=
new
TransactionScope ()) {
try
{ People p
=
new
People(); p.Name
=
"
TransactionExample
"
; p.Create(); trans.VoteCommit(); }
catch
(Exception) { trans.VoteRollBack();
throw
; } } }

另外AR还提供一种事务处理的方法,称之为嵌套事务处理(Nested transactions ),使用方法如下:

 
public
void
UserNestedTransaction() {
using
(TransactionScope t
=
new
TransactionScope()) { Company c
=
new
Company();
using
(TransactionScope t1
=
new
TransactionScope(TransactionMode.Inherits)) { c.Pid
=
0
; c.Cname
=
"
Nested
"
; c.Type
=
"
T
"
; c.Save(); t1.VoteCommit(); }
using
(TransactionScope t2
=
new
TransactionScope(TransactionMode.Inherits)) { People p
=
new
People(); p.Name
=
"
SHY520
"
;
try
{ p.Save(); }
catch
(Exception) { t2.VoteRollBack(); } } } }

因为工作的原因,AR我暂时就说这么多了,待会再把博客园关于这方面的文章整理一下,同时还是很希望和对AR有兴趣的人多多交流。

写的不对的地方,请指正,谢谢。

Email:pwei013@163.com

转载地址:http://gbuyo.baihongyu.com/

你可能感兴趣的文章
【杂谈】是谁发明了轮子?有关前端组件的些许思考与总结
查看>>
post
查看>>
application.properties中自定义属性的使用
查看>>
.NET中不同Timer
查看>>
Jmeter 4.0 扩展插件
查看>>
虚函数和虚表
查看>>
fcntl()功能 详解
查看>>
C语言第五次作业
查看>>
JavaScript 基础,登录验证.
查看>>
汇编语言之实验一
查看>>
ABP(现代ASP.NET样板开发框架)系列之10、ABP领域层——实体
查看>>
币氪研报|DOGE(dogecoin)
查看>>
GitHub使用总结
查看>>
求字符串的组合
查看>>
UINavigationController
查看>>
nginx 设置websocket支持
查看>>
appium+python搭建自动化测试框架_Appium元素定位(二)
查看>>
分辨率纪录
查看>>
C# 把一个文件夹下所有文件复制到另一个文件夹下 把一个文件夹下所有文件删除(转)...
查看>>
CentOS7像外部163邮箱发送邮件
查看>>