Lae's Blog

CODE LIFE --像蚂蚁一样工作,像蝴蝶一样生活

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

本文导读

    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

SQLWHERE 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 membershipAHAX3列弹性XHTML布局主题,和用户管理页面。这些至少需要一个星期的工作,现在已经完成了!

在很短的时间内把你的项目从设想实现为原型。这就是这个工具的强大所在——使用新手站点你可以快速实现敏捷的原型.

SubSonic 本身是一个功能非常强大的应用程序工具集;如与 ASP.NET MVC 配合使用,它将成为非常有用的应用程序框架,效果不逊 .NET 和别的语言中提供的其他快速开发应用程序框架。

4       附件

SubSonic.Demo演示代码(VS.NET 2008),数据库使用Sql Server 2000Northwind.

 

5       参考文献

SubSonic站点:http://www.subsonicproject.com/

posted on 2009-09-21 18:04  lae  阅读(1656)  评论(6编辑  收藏  举报