DataRabbit 轻量的数据访问框架(05) -- ITableAccesser
来源:互联网 发布:java enum 例子 编辑:程序博客网 时间:2024/05/27 02:28
(完全限定类名:DataRabbit.Relation.ITableAccesser)
ORM并不能完成所有的事情,有些数据库访问还是需要基于关系来进行,对于那些不提供基于关系进行数据访问操作的纯ORM框架,我认为是不明智的。在DataRabbit中,基于ORM的访问和基于关系进行数据访问各占了一半的天空,这使得我们在无法用ORM达成的地方,可以转向使用基于关系的访问器来达成。DataRabbit.Relation命名空间下的类和接口用于提供基于关系的数据库访问操作,主要包括:针对数据库的Relation访问器(IRelationAccesser)、针对Table的Relation访问器(ITableAccesser)和针对存储过程的访问器(ISPAccesser),本文先介绍 ITableAccesser。
同所有DataRabbit中的其它访问器一样,ITableAccesser也继承自ITransactionAccesser,它用于针对一个特定的表进行基于关系的数据访问。我们可以从DataRabbit的入口点IDataAccesser中获取ITableAccesser引用,比如,我们要得到针对Student表的ITableAccesser,可以这样做:
同ORM访问器一样,所有基于关系的访问器都向使用者屏蔽了地层的IDbCommand、IDbConnection等对象,使用者不必再关心打开连接、执行命令、关闭连接等繁琐的操作,只需要将sql语句交给访问器执行就可以了。比如,我们要删除所有年龄大于30的student,使用ITableAccesser可以这么做:
IDataAccesser接口相对简单,我们来看看它的全貌,之后你就知道该接口中各方法的含义了:
ORM并不能完成所有的事情,有些数据库访问还是需要基于关系来进行,对于那些不提供基于关系进行数据访问操作的纯ORM框架,我认为是不明智的。在DataRabbit中,基于ORM的访问和基于关系进行数据访问各占了一半的天空,这使得我们在无法用ORM达成的地方,可以转向使用基于关系的访问器来达成。DataRabbit.Relation命名空间下的类和接口用于提供基于关系的数据库访问操作,主要包括:针对数据库的Relation访问器(IRelationAccesser)、针对Table的Relation访问器(ITableAccesser)和针对存储过程的访问器(ISPAccesser),本文先介绍 ITableAccesser。
同所有DataRabbit中的其它访问器一样,ITableAccesser也继承自ITransactionAccesser,它用于针对一个特定的表进行基于关系的数据访问。我们可以从DataRabbit的入口点IDataAccesser中获取ITableAccesser引用,比如,我们要得到针对Student表的ITableAccesser,可以这样做:
ITableAccesser stuTableAccesser = dataAccesser.GetTableAccesser("Student", null);
同ORM访问器一样,所有基于关系的访问器都向使用者屏蔽了地层的IDbCommand、IDbConnection等对象,使用者不必再关心打开连接、执行命令、关闭连接等繁琐的操作,只需要将sql语句交给访问器执行就可以了。比如,我们要删除所有年龄大于30的student,使用ITableAccesser可以这么做:
ITableAccesser stuTableAccesser = dataAccesser.GetTableAccesser("Student", null);
stuTableAccesser.Delete(string.Format("where {0} > '30'" ,Student._Age));
使用基于关系的访问器需要自己手写SQL语句,特别是用于搜索的Where子句,由于能支持手写SQL语句,所以相对于ORM访问器,基于关系的访问器可以执行更复杂的数据库操作。注意,在介绍ORM访问器时,我们经常使用Filter来表示条件,但是Filter以及IFilterTree仅仅只能在ORM访问器中使用,在基于关系的访问器中是不能使用它们的。stuTableAccesser.Delete(string.Format("where {0} > '30'" ,Student._Age));
IDataAccesser接口相对简单,我们来看看它的全貌,之后你就知道该接口中各方法的含义了:
public interface ITableAccesser :ITransactionAccesser
{
#region TableName
/// <summary>
/// TableName 目标表名称
/// </summary>
string TableName { get; }
#endregion
#region CommitData
/// <summary>
/// CommitData 提交DataTable中的changes到数据库
/// </summary>
void CommitData(DataTable dt);
#endregion
#region Delete
/// <summary>
/// Delete 删除目标表中所有满足where条件的记录
/// </summary>
void Delete(string where);
#endregion
#region Clear
/// <summary>
/// Clear 清空目标表
/// </summary>
void Clear();
#endregion
#region Insert
/// <summary>
/// Insert 将row存放到数据库中
/// </summary>
void Insert(DataRow row);
#endregion
#region Get
/// <summary>
/// Get 获取满足条件的DataSet
/// </summary>
DataSet Get(string where);
/// <summary>
/// GetOne 返回满足where条件的第一条记录
/// </summary>
DataRow GetOne(string where);
#endregion
#region no transaction
/// <summary>
/// GetRecordsCount 获取目标表中满足where条件的记录总数
/// </summary>
int GetRecordsCount(string where);
/// <summary>
/// NewRow 返回一个与目标表大纲完全一致的DataRow
/// </summary>
DataRow NewRow();
/// <summary>
/// GetEmptyTable 获取一个空的DataTable,该DataTable反映了目标表的结构
/// </summary>
/// <returns></returns>
DataTable GetEmptyTable();
#endregion
}
{
#region TableName
/// <summary>
/// TableName 目标表名称
/// </summary>
string TableName { get; }
#endregion
#region CommitData
/// <summary>
/// CommitData 提交DataTable中的changes到数据库
/// </summary>
void CommitData(DataTable dt);
#endregion
#region Delete
/// <summary>
/// Delete 删除目标表中所有满足where条件的记录
/// </summary>
void Delete(string where);
#endregion
#region Clear
/// <summary>
/// Clear 清空目标表
/// </summary>
void Clear();
#endregion
#region Insert
/// <summary>
/// Insert 将row存放到数据库中
/// </summary>
void Insert(DataRow row);
#endregion
#region Get
/// <summary>
/// Get 获取满足条件的DataSet
/// </summary>
DataSet Get(string where);
/// <summary>
/// GetOne 返回满足where条件的第一条记录
/// </summary>
DataRow GetOne(string where);
#endregion
#region no transaction
/// <summary>
/// GetRecordsCount 获取目标表中满足where条件的记录总数
/// </summary>
int GetRecordsCount(string where);
/// <summary>
/// NewRow 返回一个与目标表大纲完全一致的DataRow
/// </summary>
DataRow NewRow();
/// <summary>
/// GetEmptyTable 获取一个空的DataTable,该DataTable反映了目标表的结构
/// </summary>
/// <returns></returns>
DataTable GetEmptyTable();
#endregion
}
- DataRabbit 轻量的数据访问框架(05) -- ITableAccesser
- DataRabbit 轻量的数据访问框架(05) -- ITableAccesser
- DataRabbit 轻量的数据访问框架(12)-- 将DataRabbit融入架构
- DataRabbit 轻量的数据访问框架(08) -- DataRabbit 的入口点:TransactionScopeFactory和TransactionScope
- DataRabbit 轻量的数据访问框架(14)-- DataRabbit 3.0 与 Linq to sql 性能比较
- DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!
- DataRabbit 轻量的数据访问框架(15)-- IOrmAccesser的BatchInsert批量插入!
- DataRabbit 轻量的数据访问框架(03) -- IOrmAccesser(续)
- DataRabbit 轻量的数据访问框架(03) -- IOrmAccesser(续)
- DataRabbit 轻量的数据访问框架(00) -- 序
- DataRabbit 轻量的数据访问框架(02) -- IOrmAccesser
- DataRabbit 轻量的数据访问框架(04) -- IEntityRelationLoader
- DataRabbit 轻量的数据访问框架(06) -- IRelationAccesser
- DataRabbit 轻量的数据访问框架(19)-- 读写分离与隔离级别
- DataRabbit 轻量的数据访问框架(10) -- IPagerManager
- DataRabbit 轻量的数据访问框架(09) -- IDataSchemaAccesser
- DataRabbit 轻量的数据访问框架(07) -- ISPAccesser
- DataRabbit 轻量的数据访问框架(06) -- IRelationAccesser
- 信息经济学
- 图片格式介绍
- 高效率C/C++Builder 2006程序设计研讨会
- zju1008
- Turbo产品系列回来了!
- DataRabbit 轻量的数据访问框架(05) -- ITableAccesser
- 我以前的痛苦,你也拥有吗?
- DataRabbit 轻量的数据访问框架(06) -- IRelationAccesser
- 您也是打痛苦混战的高手吗?
- asp.net Excel导入&导出
- 转一条个人网站上的新闻。
- Delphi.NET多层应用系统开发技术研讨会
- 从厦门出差已回台湾——噢,下次我可要学乖了
- JAVA GUI中日期选择控件的实现