SubSonic入门(上)

本文导读

    1 引言

    2 使用步骤

       2.1 配置

       2.2 操作数据

    3 结论

    4 附件

   5 参考文献

 

1       引言

SubSonic是一个类似Rails的开源.NET项目。你可以把它看作是一把瑞士军刀,它可以用来构建Website和通过ORM方式来访问数据。Rob ConeryEric Kemp是推动SubSonic的主要开发人员,与项目良好的发展有着密切的关系。

作为一个开发人员生产力工具,SubSonic通过从基础上支持软件开发的迭代本质,自动化了数据驱动的应用程序开发中重复性的、无趣的过程。通过这个自动生成的Web-Based的数据操纵的“架子”,轻量级和灵活的查询工具,以及一个不断丰富功能的用于通用业务数据验证和转换需要的类库,SubSonic让开发人员可以快速的构建他们的应用程序,而不是一些支撑的基础系统。

SubSonic也是一个数据层构建器一个易维护的应用程序,不同的类之间有不同的分工,通常分为界面层、业务层和数据访问层。虽然这一技术有利于更好地组织应用,一些开发人员不愿这么做。创建一个可靠的和快速的数据访问层需要一些规划,一旦你创建了一个,他们看起来都是相似的。SubSonic帮助你基于数据库自动创建数据库访问层。

 

2       SubSonic使用步骤

2.1       配置

SubSonic通过读取你的数据库的结构,并为你构建快速,灵活的数据访问层类。他只需要很少的配置,为你提供了不同的方法查询和保存数据,并提供方法给你定制以适应你的开发风格。SubSonic受到Rub on RailsActiveRecord的启发,不过SubSonic是一个纯粹的.NET组件。

和其它的ORM比较,SubSonic需要的配置很少,最小要求是将下列配置添加到Web.config(App.config)文件:

  • 一个或者多个数据库连接串

  • 一个SubSonic配置节

  • 将适当的数据库连接到SubSonic

就是这么简单-没有必要关心要那些表或配置表和对象的映射关系。在实践中,配置看起来如下:

   

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<!SubSonic配置节-->

  <configSections>

    <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" allowDefinition="MachineToApplication"

             restartOnExternalChanges="true" requirePermission="false"/>

  </configSections>

  <!数据库连接字符串-->

  <connectionStrings>

    <add name="sqlNorthwind" connectionString="Data Source=localhost; Database=Northwind; Integrated Security=true;"/>

  </connectionStrings>

 

  <SubSonicService defaultProvider="sqlNorthwindProvider" enableTrace="false" templateDirectory="">

    <providers>

      <clear/>

      <add name="sqlNorthwindProvider" type="SubSonic.SqlDataProvider, SubSonic"

           connectionStringName="sqlNorthwind" generatedNamespace="DAL.Sql"/>

    </providers>

  </SubSonicService>

</configuration>

 

一旦你配置你的应用程序,你可以生成你的数据访问层的使用SubSonic命令行工具/图形界面工具。另外,如果你使用asp.net ,你可以用建立提供商,以动态生成的数据层。

2.1.1      命令行工具

你可以使用命令行工具(足够令人惊讶)命令行,但它是更容易打造出一个新的外部工具(见图表1)生成类。 图2显示所生成的类文件。

1 :配置命令行工具

SubSonic生成工具生成的类是一些(.cs)物理文件,你可以看看,学习,但你不应该改变这些文件,任何改变都会在再次生成数据层时被覆盖,所有的生成的类都是部分类(partial),你可以把你自己的扩展代码放在你自己添加的文件中。

2.1.2      图形界面工具

通过安装SubSonic,可以在开始->程序菜单中找到SubSonic执行程序,打开它,如下图所示:

第一步:在图形窗口的左边菜单树中单击”Connection String”,选择菜单上面的New Connection String,如图所示增加数据库连接字符串。在右边属性窗口填写连接字符串和名称

第二步:选择菜单上面New Project,增加需要SubSonic生成的项目名称以及使用的连接字符串,如下图所示:

单击New Provider,增加provider,并选择当前项目使用的Provider,输入项目生成代码路径

第三步:在项目(Northwind)节点下,单击Provider名称,在右边窗口输入生成的.cs类的命名空间、Provider类型以及其他一些设置属性。

第四步:通过SubSonic的脚手架功能预览、编辑数据,选择项目,单击”Scaffolds”如下图所示:

2.1.3      构建提供器

为了避免编辑SubSonic生成的.cs类文件,你可以用构建提供器自动生成这些类(仅适用于Web Site)。为了使用构建提供器,你需要在web.config加类似下面的配置

<configuration> 

  <system.web> 

    <compilation> 

      <buildProviders> 

        <add extension=".abp" type="SubSonic.BuildProvider, SubSonic"/> 

      </buildProviders> 

     </compilation> 

  </system.web> 

</configuration> 

 

 

上述配置是构建提供器处理任何在App_Code目录下以.abp结尾的文件,这和自定义的DataSetApp_Code目录添加一个XML Schema非常相似。构建提供器只需一个以.abp的文件,不需要写任何文字。当应用程序构建的时候,和命令行工具一样生成了哪些类,唯一不同的是你看不到那些文件。

2.2       操作数据

一旦使用SubSonic创建了数据访问层(DAL),无论是使用代码生成器、图形工具还是BuilderProvider,你随时可以查询你的数据库,目前SubSonic支持下列数据库

  • 微软SQL SERVER 20002005,包括Express版本

  • Oracle

  • MySQL

  • SQLite

SubSonic为你的数据库里的每个表生成三个类:

  • 表名奇数形式的类;例如有一个表Products,类名就是Product,这是一个强类型的类代表数据库表中的一行数据,表中的每一列对应类中的强类型的属性名,允许null的字段定义为nullable

  • 集合类:例如一个表Products,你将得到ProductCollection 类,这个类提供了好多方法处理数据库的数据

  • 一个控制器(如ProductController):这提供了基本功能(创建,检索,更新和删除)。 而ProductProductCollection 能装载自己,是ProductController是专为这些任务而设计的。此外,你可以把控制器作为数据源,为您的网页使用ObjectDataSource控件。

 

2.2.1      查询数据

强类型类让你可以用多种方法查询数据库,这取决于你的需要。下面是几种查询:

Ø  简单的查询集合

ProductCollection products = new ProductCollection().OrderByDesc(Product.CategoryIDColumn.ColumnName).Load();  

Ø  复杂查询

CustomerCollection customers = new CustomerCollection()

                                   .Where("Country", "Canada")

                                   .Where(Customer.Columns.Region, "BC")

                                   .OrderByDesc(Customer.Columns.PostalCode) .Load();

Ø  查询单个对象

Employee address = new EmployeeController().FetchByID(1).Single<Employee>();

生成的类为你提供了一个充分的方法进行查询,通过Where条件,Order by排序,甚至布尔运算。 你可以查询强类对象或集合,一个DataSet,或IDataReader,这取决于您的需要。 除了以强类型类,SubSonic 还包括一个通用的查询工具,创造性地称为Query You can use this to perform ad hoc queries of your database.你可以使用它从你的数据库临时性的查询。

Query q = Product.Query()

                 .WHERE("UnitPrice > 50")

                 .AND(Product.Columns.ProductName, Comparison.Like, "S%")

                 .BETWEEN_VALUES("CategoryID", 1, 2)

                 .ORDER_BY("ProductName");

            this.ProductGrid.DataSource = q.ExecuteReader();

上面的例子中使用了产品类进行查询。 你可以也这样做,这所创建的查询使用代码如下:

          Query qy = new Query(Product.Schema);

         ...

每一种方法在查询返回一个查询对象。这使您能够串起来,因为要找回你需要的数据。SubSonic 生成对象的性能是好的- 比自定义的DataSet快。因此,你使用SubSonic不会牺牲性能。

 

2.2.2      编辑数据

Ø  增加数据

通过对象Save()方法增加数据

Product product = new Product();
product.ProductName = "my xiaoli";
product.SupplierID = 1;
product.CategoryID = 1;
product.Discontinued = true;
//............
product.Save();

通过Insert类插入数据

int i = new Insert().Into(Product.Schema,
        "ProductName",
        "SupplierID",
        "CategoryID",
        "Discontinued

)
.Values("my amo", 1, 1, 1).Execute();

 

Ø  修改数据

Product product = new Product(4);

product.ProductName = "Test";

product.Save();

 

int i = new Update(Product.Schema)
      .Set(Product.ProductNameColumn).EqualTo("Chai -- Test")           .Where(Product.ProductIdColumn).IsEqualTo(1)

      .Execute();

 

2.2.3      删除数据

通过主键获取数据对象,执行删除操作,返回删除受影响的数据行数,如下所示:

int i = new Delete ().From<Product>()
                   .Where(Product.ProductIDColumn). IsEqualTo(1)
                   .Execute();

 

2.2.4      它同时还具有牛排刀...

SubSonic,你可能忽视了名字空间SubSonic.Sugar ,但如果你这样做,你错过了一些有用的特性。SubSonic.Sugar 没有迷人的功能,而是它提供的"杂项"的功能包括特性为:

  • 文件操作,如在一个请求打开和阅读文件。

  • 日期操作,如确定两个日期之间有多少工作日。

  • 字符串操作,例如转换,以适当的情况下,或剥HTML格式。

  • 数字操作,如确定如果一个数字是不是整数。

  • Web操作,如打开和阅读一个网页,或执行DNS查找。

  • 验证操作,其中包括通用签证,万事达卡和其他常见的信用卡验证。

2.2.5      扩展SubSonic

没有应用能够提供满足所有需求的解决方案,因此,使用SubSonic所生成的类是不够的。您可能要像生成的类中添加方法,或者你可能要改变生成的类。 SubSonic满足这两方面的需要。

所有的SubSonic生成的类都是局部类。这意味着你可以增加功能到另一个文件,而类的名字时一样的。 如果你不喜欢SubSonic所生成的类,你可以重写模板,模板是asp.net页面。

 

3       结论

在下篇中进行总结,未完待续……

4       附件

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

 

5       参考文献

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

转载于:https://www.cnblogs.com/lae/archive/2009/09/21/1571285.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值