BG5SBK.FrameworkV2.DataLayer更新,附带详细说明
2006-07-07 12:03
288 查看
此次主要更新有:
1.增加了DataSession (数据库会话)类,用于需要在一次数据库连接或者事务处理中执行多个操作的地方
2.改进了资源回收,可以使用完立即销毁的对象就立即销毁,避免增加服务器负担
3.改成DataProvider代替所有具体DataProvider子类进行实体对象操作,这样做的目的是为业务层提供统一接口,为下一步的持久层改造做好准备。不过依然还是支持与具体实体类对应的DataProvider子类对实体对象操作,但是建议不要使用。
其它相关文章请看:轻量级持久层框架V2版本
以下举几个例子:(假设我们有一张表名为Table1,影射它的实体类也叫Table1)
0.配置文件:
<appSettings>
<add key="DefaultDatabase" value="DefaultDB"/>
</appSettings>
<connectionStrings>
<add name="DefaultDB" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Downloads\Save\Personal\test .mdb" providerName="System.Data.OleDb"/>
<add name="DataBase2" connectionString="Server=(local);Database=Northwind;uid=;pwd=" providerName="System.Data.SqlClient"/>
</connectionStrings>
<add key="DefaultDatabase" value="DefaultDB"/>是指定默认的数据库连接字符串,DataProvider<Table1>.GetInstance()就是使用默认数据库连接,如果要自定非默认的数据库连接可以使用:DataProvider<Table1>.GetInstance("DataBase2"),框架中的DataAccess.Create()也是如此!!
目前支持的providerName有:System.Data.SqlClient,System.Data.Odbc,System.Data.OleDb
使用OleDb千万注意!!!,CodeSmith生成的包含日期类型字段表的DataProvider代码中,DbType.DataTime全部要替换成DbType.String,否则会出现数据类型不匹配的异常!
1.执行一次简单查询:
//返回前10条数据
List<Table1> _result = DataProvider<Table1>.GetInstance().Select(10, null, null);
2.执行带条件和排序的简单查询:
//获取CreateTime等于今天日期的所有记录,并按Name降序排列
List<Table1> _result = DataProvider<Table1>.GetInstance().Select(0, string.Format("[CreateTime]='{0}'", DateTime.Now.ToShortDateString()), "[Name] desc");
3.执行查询,只返回指定字段的值:
//返回前10条记录的CreateTime字段的值,其余字段值不获取
List<Table1> _result = DataProvider<Table1>.GetInstance().Select(10, null, null, Table1.ColumnNames.CreateTime);
//返回前10条记录的CreateTime字段的值,其余字段值不获取,字段限定参数是不定长的,需要几个字段就一直加下去
List<Table1> _result = DataProvider<Table1>.GetInstance().Select(10, null, null, Table1.ColumnNames.CreateTime, Table1.ColumnNames.Name);
4.执行复杂查询:
//复杂查询必须结果集中的字段都是实体类中有的字段,其余非本实体类的字段将会丢弃
string _sql = string.Format("Select a.* From Table1 as a, Table2 as b Where Table2.ID='{0}' And Table1.Name=Table2.Name", 123);
List<Table1> _result = DataProvider<table1>.GetInstance().Select(_sql);
5.根据主键返回结果:
//返回主键值为123的所有结果,这里不使用单个对象返回结果是为了方便在前台直接进行数据绑定
List<Table1> _result = DataProvider<table1>.GetInstance().SelectByKeys(0, "123");
6. 插入单个实体对象:
Table1 _newItem = new Entity.Table1();
_newItem.CreateTime = DateTime.Now;
DataProvider<Table1>.GetInstance().Insert(_newItem);
//插入对象时可以指定要插入哪些字段,字段限定参数是不定长的,需要几个字段就一直加下去
DataProvider<Table1>.GetInstance().Insert(_newItem, Table1.ColumnNames.CreateTime);
7.插入多个实体对象:
Table1 _newItem1 = new Entity.Table1();
_newItem.CreateTime = DateTime.Now;
Table1 _newItem2 = new Entity.Table1();
_newItem.CreateTime = DateTime.Now;
List<table1> _newList = new List<table1>();
_newList.Add(_newItem1);
_newList.Add(_newItem2);
DataProvider<Table1>.GetInstance().Insert(_newList);
//插入多个对象一样可以指定要插入哪些字段,这里不再例举
8.更新单个或多个对象:
//Update接口和Insert接口参数和参数用途都是一样,这里简单例举就好,可以同上面一样指定更新某些字段的值而不全部更新
DataProvider<Table1>.GetInstance().Update(_newItem);
DataProvider<Table1>.GetInstance().Update(_newList);
9.删除对象或多个对象:
//删除主键值为123的对象
DataProvider<Table1>.GetInstance().Delete("123");
//删除CreateTime字段值为今天日期的所有记录
DataProvider<Table1>.GetInstance().DeleteByFilter(string.Format("[CreateTime]='{0}'", DateTime.Now.ToShortDateString()));
10.使用DataSession避免反复打开关闭数据库连接:
//在同一次数据库连接中执行两次查询
using (DatabaseSession _seesion = new DatabaseSession())
using (DatabaseSession _seesion = new DatabaseSession())
Table1 _newItem = new Entity.Table1();
_newItem.ID = "123";
_newItem.CreateTime = DateTime.Now;
DataProvider<Table1>.GetInstance().Insert(_newItem);
_newItem.Name = "XXX";
DataProvider<Table1>.GetInstance().Update(_newItem);
}
12.执行复杂的SQL脚本,存储过程等。。。:
这些东西交给DataAccess执行,一般使用DataAccess.DefaultInstance就可以,特殊情况使用DataAccess.Create()创建DataAccess实例
新版文件下载:(用于自动生成代码的CodeSmith V3.2 的模版文件在Templates目录中,不懂使用可以问我)
%20BG5SBK.FrameworkV2.rar][2006-07-18-01] BG5SBK.FrameworkV2.rar
有待改进的地方:
1.期待下一次更新使用CodeDom技术缓存反射信息,这样不用再使用CodeSmith自动生成代码
2.SQL脚本暴露!这个是严重影响项目迁移的问题!并且SQL脚本不能在编译时马上发现错误,就像定时炸弹一样!
3.我也想搞个LazyLoad,可以在再入大量数据时降低程序负担
其它相关文章请看:轻量级持久层框架V2版本
1.增加了DataSession (数据库会话)类,用于需要在一次数据库连接或者事务处理中执行多个操作的地方
2.改进了资源回收,可以使用完立即销毁的对象就立即销毁,避免增加服务器负担
3.改成DataProvider代替所有具体DataProvider子类进行实体对象操作,这样做的目的是为业务层提供统一接口,为下一步的持久层改造做好准备。不过依然还是支持与具体实体类对应的DataProvider子类对实体对象操作,但是建议不要使用。
其它相关文章请看:轻量级持久层框架V2版本
以下举几个例子:(假设我们有一张表名为Table1,影射它的实体类也叫Table1)
0.配置文件:
<appSettings>
<add key="DefaultDatabase" value="DefaultDB"/>
</appSettings>
<connectionStrings>
<add name="DefaultDB" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Downloads\Save\Personal\test .mdb" providerName="System.Data.OleDb"/>
<add name="DataBase2" connectionString="Server=(local);Database=Northwind;uid=;pwd=" providerName="System.Data.SqlClient"/>
</connectionStrings>
<add key="DefaultDatabase" value="DefaultDB"/>是指定默认的数据库连接字符串,DataProvider<Table1>.GetInstance()就是使用默认数据库连接,如果要自定非默认的数据库连接可以使用:DataProvider<Table1>.GetInstance("DataBase2"),框架中的DataAccess.Create()也是如此!!
目前支持的providerName有:System.Data.SqlClient,System.Data.Odbc,System.Data.OleDb
使用OleDb千万注意!!!,CodeSmith生成的包含日期类型字段表的DataProvider代码中,DbType.DataTime全部要替换成DbType.String,否则会出现数据类型不匹配的异常!
1.执行一次简单查询:
//返回前10条数据
List<Table1> _result = DataProvider<Table1>.GetInstance().Select(10, null, null);
2.执行带条件和排序的简单查询:
//获取CreateTime等于今天日期的所有记录,并按Name降序排列
List<Table1> _result = DataProvider<Table1>.GetInstance().Select(0, string.Format("[CreateTime]='{0}'", DateTime.Now.ToShortDateString()), "[Name] desc");
3.执行查询,只返回指定字段的值:
//返回前10条记录的CreateTime字段的值,其余字段值不获取
List<Table1> _result = DataProvider<Table1>.GetInstance().Select(10, null, null, Table1.ColumnNames.CreateTime);
//返回前10条记录的CreateTime字段的值,其余字段值不获取,字段限定参数是不定长的,需要几个字段就一直加下去
List<Table1> _result = DataProvider<Table1>.GetInstance().Select(10, null, null, Table1.ColumnNames.CreateTime, Table1.ColumnNames.Name);
4.执行复杂查询:
//复杂查询必须结果集中的字段都是实体类中有的字段,其余非本实体类的字段将会丢弃
string _sql = string.Format("Select a.* From Table1 as a, Table2 as b Where Table2.ID='{0}' And Table1.Name=Table2.Name", 123);
List<Table1> _result = DataProvider<table1>.GetInstance().Select(_sql);
5.根据主键返回结果:
//返回主键值为123的所有结果,这里不使用单个对象返回结果是为了方便在前台直接进行数据绑定
List<Table1> _result = DataProvider<table1>.GetInstance().SelectByKeys(0, "123");
6. 插入单个实体对象:
Table1 _newItem = new Entity.Table1();
_newItem.CreateTime = DateTime.Now;
DataProvider<Table1>.GetInstance().Insert(_newItem);
//插入对象时可以指定要插入哪些字段,字段限定参数是不定长的,需要几个字段就一直加下去
DataProvider<Table1>.GetInstance().Insert(_newItem, Table1.ColumnNames.CreateTime);
7.插入多个实体对象:
Table1 _newItem1 = new Entity.Table1();
_newItem.CreateTime = DateTime.Now;
Table1 _newItem2 = new Entity.Table1();
_newItem.CreateTime = DateTime.Now;
List<table1> _newList = new List<table1>();
_newList.Add(_newItem1);
_newList.Add(_newItem2);
DataProvider<Table1>.GetInstance().Insert(_newList);
//插入多个对象一样可以指定要插入哪些字段,这里不再例举
8.更新单个或多个对象:
//Update接口和Insert接口参数和参数用途都是一样,这里简单例举就好,可以同上面一样指定更新某些字段的值而不全部更新
DataProvider<Table1>.GetInstance().Update(_newItem);
DataProvider<Table1>.GetInstance().Update(_newList);
9.删除对象或多个对象:
//删除主键值为123的对象
DataProvider<Table1>.GetInstance().Delete("123");
//删除CreateTime字段值为今天日期的所有记录
DataProvider<Table1>.GetInstance().DeleteByFilter(string.Format("[CreateTime]='{0}'", DateTime.Now.ToShortDateString()));
10.使用DataSession避免反复打开关闭数据库连接:
//在同一次数据库连接中执行两次查询
using (DatabaseSession _seesion = new DatabaseSession())
using (DatabaseSession _seesion = new DatabaseSession())
Table1 _newItem = new Entity.Table1();
_newItem.ID = "123";
_newItem.CreateTime = DateTime.Now;
DataProvider<Table1>.GetInstance().Insert(_newItem);
_newItem.Name = "XXX";
DataProvider<Table1>.GetInstance().Update(_newItem);
}
12.执行复杂的SQL脚本,存储过程等。。。:
这些东西交给DataAccess执行,一般使用DataAccess.DefaultInstance就可以,特殊情况使用DataAccess.Create()创建DataAccess实例
新版文件下载:(用于自动生成代码的CodeSmith V3.2 的模版文件在Templates目录中,不懂使用可以问我)
%20BG5SBK.FrameworkV2.rar][2006-07-18-01] BG5SBK.FrameworkV2.rar
有待改进的地方:
1.期待下一次更新使用CodeDom技术缓存反射信息,这样不用再使用CodeSmith自动生成代码
2.SQL脚本暴露!这个是严重影响项目迁移的问题!并且SQL脚本不能在编译时马上发现错误,就像定时炸弹一样!
3.我也想搞个LazyLoad,可以在再入大量数据时降低程序负担
其它相关文章请看:轻量级持久层框架V2版本
相关文章推荐
- SunshineCRM 20130518发布,附带更新说明
- 基于微信Tinker的热更新详细说明
- string类详细说明(更新中)
- wow1.6版更新详细说明
- [持续更新]Android 细节,小技巧 详细说明收集
- 微信小程序的正确开启方法,最新更新小程序附带详细图
- XML文件的解析--非常详细的libxml库函数解释说明并附带实例
- SunshineCRM 20130518发布,附带更新说明
- SunshineCRM 20130518发布,附带更新说明
- 部落冲突(Clash of Clans)12月更新官方资料:可掠夺资源比例调整的详细说明
- Qt 5.9发布,功能更新列表详细说明
- 关于DB2 MQT 增量更新,出错代码详细说明
- SunshineCRM 20130518发布,附带更新说明
- TL-X19固件汇总(1.01-5.07+兔斯基美化版)带详细更新说明
- 使用iozone和blogbench测试硬盘的读写性能,附带详细条目说明、图解测试报告和说明
- TestLink 1.9.3安装配置详细说明附带汉化过程
- Nginx配置文件详细说明
- HighCharts 详细使用及API文档说明
- JAVA自动拆装箱详细说明(转)
- React Native 单位详细说明