本文导读:
1 引言
2 高级应用
2.1 查询
2.2 事务
3 结论
4 附件
5 参考文献
1 引言
在《SubSonic入门(上)》一文中介绍了一些SubSonic入门的知识,本文旨在探讨SubSonic更深入的应用,为实际项目中的应用提高生产效率和质量。
2 进阶应用
2.1 查询
2.1.1 关联查询
|
//查询Product表中产品关联的种类名称,并且CategoryID大于4的记录 DataSet ds = new Select(Product.ProductNameColumn, Category.CategoryIDColumn,Category.CategoryNameColumn) .From<Product>() .InnerJoin(Category.CategoryIDColumn, Product.CategoryIDColumn) .Where(Category.CategoryIDColumn) .IsGreaterThan(4) .ExecuteDataSet(); //在DataGridView显示的列是ProductName,CategoryID,CategoryName this.dataGridView1.DataSource = ds.Tables[0]; |
注意InnerJoin(f2, f1) 的使用方法
2.1.2 分页查询
|
//将Product表中产品分成每页30条数据显示,按ProductID关键字分页 List<Product> ds = new Select().From<Product>() .Paged(1, 30,Product.ProductIDColumn.ColumnName) .OrderAsc(Product.ProductIDColumn.ColumnName) .ExecuteTypedList<Product>(); this.dataGridView1.DataSource = ds; |
Paged方法的参数如下:
SqlQuery Paged(int currentPage, int pageSize);
SqlQuery Paged(int currentPage, int pageSize, string idColumn);
2.1.3 相关查询方法
Ø ExecuteReader(); 返回DataReader
Ø ExecuteScalar(); 返回对象
Ø ExecuteScalar<string>(); 返回泛型对象
Ø ExecuteSingle<Product>(); 返回表实体对象
Ø ExecuteTypedList<Product>(); 返回泛型表实休数据集
Ø ExecuteDataSet(); 返回DataSet
Ø ExecuteJoinedDataSet<强数型数据集>(); 返回关联查询 DataSet
Ø Execute(); 返回执行后数据更新数目
2.1.4 SQL关键词
Ø IsEqualTo(obj) // 等于 value
Ø IsBetweenAnd(obj1, obj2) // [字段1] BETWEEN 值1 AND 值2
Ø StartsWith // LIEK '1%‘
Ø EndsWith // LIEK '%1‘
Ø IsGreaterThan // [字段1] > 值1
Ø IsGreaterThanOrEqualToIsGreaterThan // [字段1] >= 值1
Ø IsLessThan // [字段1] < 值1
Ø IsLessThanOrEqualToIsLessThan // [字段1] <= 值1
Ø WhereExpression / AndExpression // Expression 表示括号
例1:
C#:
.Where("1").IsGreaterThan(1)
.And("2").IsGreaterThanOrEqualTo(2)
.AndExpression("3").IsLessThan(3)
.AndExpression("4").IsLessThanOrEqualTo(4).And("5").StartsWith("5")
.AndExpression("6").EndsWith("6")
.ExecuteSingle<Product>();
例2:
SQL:WHERE 1 > @1AND 2 >= @2 AND (3 < @3) AND (4 <= @4 AND 5 LIKE @5) AND (6 LIKE @6)
2.2 事务操作
Ø 事务1
使用SubSonic自身的SqlQuery.ExecuteTransaction()方法结合Insert结合完成事务操作,示例如下:
|
List<Insert> queries = new List<Insert>(); queries.Add(new Insert().Into(Product.Schema).Values("product1")); queries.Add(new Insert().Into(Product.Schema).Values("product2")); queries.Add(new Insert().Into(Product.Schema).Values("product3")); queries.Add(new Insert().Into(Product.Schema).Values("product4")); queries.Add(new Insert().Into(Product.Schema).Values("product5")); queries.Add(new Insert().Into(Product.Schema).Values("product6")); queries.Add(new Insert().Into(Product.Schema).Values("product7")); //执行事务 SqlQuery.ExecuteTransaction(queries); |
Ø 事务2
使用.Net Framework提供的TransactionScope 事务类结合SubSonic.SharedDbConnectionScope类完成事务操作,示例如下:
|
using (SharedDbConnectionScope sp = new SharedDbConnectionScope()) { using (TransactionScope scope = new TransactionScope()) { // coding.... scope.Complete(); } } |
3 结论
Subsonic可以帮助开发组缩短你的开发周期。不仅仅是因为在开发初期帮你自动生成了代码,并且在你需要迁移数据库时也不需要重写数据层。
你可以选择完全采用ORM(关系对象映射),也可以使用存储过程和视图。我们没有企图告诉你怎么做,因为你已经知道怎么做最好。我们只是想给你一些帮助。
帮助你的应用自动构建。通过SubSonic的代码生成器(类,脚手架,批处理类batch-class),在很短的时间内你的站点就可以实现自动构建。然后脚手架控件(scaffolding)会帮助你很快实现数据处理。
一个可扩展的坚实的基础。我们的新手站点已经集成了多种特性,包括ASP.NET membership,AHAX,3列弹性XHTML布局主题,和用户管理页面。这些至少需要一个星期的工作,现在已经完成了!
在很短的时间内把你的项目从设想实现为原型。这就是这个工具的强大所在——使用新手站点你可以快速实现敏捷的原型.
SubSonic 本身是一个功能非常强大的应用程序工具集;如与 ASP.NET MVC 配合使用,它将成为非常有用的应用程序框架,效果不逊 .NET 和别的语言中提供的其他快速开发应用程序框架。
4 附件
SubSonic.Demo演示代码(VS.NET 2008),数据库使用Sql Server 2000的Northwind.
5 参考文献
SubSonic站点:http://www.subsonicproject.com/

浙公网安备 33010602011771号