转:SubSonic介绍和相关文章

介绍了SubSonic,一个数据层构建器

导言

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

SubSonic是什么?

SubSonic是一个数据访问构建器。他还是一个auto-magic 的对象关系映射(ORM)工具,帮助你快速建立一个网站。
像吹嘘的那样,SubSonic能做什么工作,怎么能帮助你更快的建立应用程序?SubSonic通过读取你的数据库的结构,并为你构建快速,灵活的数据 访问层类。他只需要很少的配置,为你提供了不同的方法查询和保存数据,并提供方法给你定制以适应你的开发风格。SubSonic受到Rub on Rails的ActiveRecord的启发,不过SubSonic是一个纯粹的.NET组件。

SubSonic配置

和其它的ORM比较,SubSonic需要的配置很少,最小要求是将下列配置添加到web.config(app.config)文件:
一个或者多个数据库连接串
一个SubSonic配置节
连接适当的数据库连接到SubSonic
就是这么简单-没有必要关心要那些表或配置表和对象的映射关系。在实践中,配置看起来如下:
<configuration>    <!-- 1 - Connection String(s) -->    <connectionStrings>      <add name="Northwind"            connectionString="Data Source=.\sqlexpress;Initial              Catalog=Northwind;Integrated Security=True"/>    </connectionStrings>    <configSections>      <!-- 2 - SubSonic section handler -->      <section name="SubSonicService"                 type="SubSonic.SubSonicSection, SubSonic"/>    </configSections>    <!-- 3 - Point SubSonic at the appropriate data source(s) -->    <SubSonicService defaultProvider="Northwind">      <providers>        <add name="Northwind"               type="SubSonic.SqlDataProvider, SubSonic"               connectionStringName="Northwind"               generatedNamespace="Northwind"/>      </providers>    </SubSonicService>  </configuration>一旦你配置你的应用程序,你可以生成你的数据访问层的使用SubSonic命令行工具/图形界面工具。另外,如果你使用asp.net ,你可以用建立提供商,以动态生成的数据层。你可以使用命令行工具(足够令人惊讶)命令行,但它是更容易打造出一个新的外部工具(见图表1)生成类。 图2显示所生成的类。 图1 :配置命令行工具

生成的类是一些物理文件,你可以看看,学习,当你不应该改变这些文件,任何改变都会在再次生成数据层时被覆盖,所有的生成的类都是部分类(partial),你可以把你自己的扩展代码放在你自己添加的文件中。为了避免编辑这些文件,你可以用构建提供器自动生成这些类。

为了使用构建提供器,你需要在web.config加类似下面的配置
<configuration>    <system.web>      <compilation>        <buildProviders>          <add extension=".abp" type="SubSonic.BuildProvider, SubSonic"/>        </buildProviders>       </compilation>    </system.web>  </configuration>上述配置是构建提供器处理任何在App_Code目录下以.abp结尾的文件,这和自定义的DataSet在App_Code目录添加一个XML Schema非常相似。构建提供器只需一个以.abp的文件,不需要写任何文字。当应用程序构建的时候,和命令行工具一样生成了哪些类,唯一不同的是你看 不到那些文件。

获取数据

一旦你用SubSonic创建了数据访问层(DAL),无论是使用代码生成器还是BuilderProvider,你随时可以查询你的数据库,目前SubSonic支持下列数据库
微软SQL SERVER 2000或2005,包括Express版本
Oracle
MySQL
SQLite
SubSonic为你的数据库里的每个表生成三个类:
表名奇数形式的类;例如有一个表Products,类名就是Product,这是一个强类型的类代表数据库表中的一行数据,表中的每一列对应类中的强类型的属性名,允许null的字段定义为nullable
集合类:例如一个表Products,你将得到ProductCollection 类,这个类提供了好多方法处理数据库的数据
一 个控制器(如ProductController):这提供了基本功能(创建,检索,更新和删除)。 而Product和ProductCollection 能装载自己,是ProductController是专为这些任务而设计的。此外,你可以把控制器作为数据源,为您的网页使用 ObjectDataSource控件。


强类型类让你可以用多种方法查询数据库,这取决于你的需要。下面是几种查询:
简单的查询集合
PostCollection posts =  new PostCollection().OrderByDesc("PostedOn").Load()复杂查询
Northwind.CustomerCollection customers = new Northwind.CustomerCollection()       .Where("Country", "Canada")       .Where(Northwind.Customer.Columns.Region, "BC")       .OrderByDesc(Northwind.Customer.Columns.PostalCode)       .Load();查询单个对象
if(!string.IsNullOrEmpty(Request.QueryString"id") ){     int id = Int32.Parse(Request.QueryString"id") ;      post = new MyBlog.Post(id);   }下列关系
Northwind.Customer.FetchByID("BOTM")       .Orders()0       .OrderDetails()0       .Product       .ProductName;生成的类为你提供了一个充分的方法进行查询,通过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 q = new Query(Product.Schema)   ... //as before每一种方法在查询返回一个查询对象。这使您能够串起来,因为要找回你需要的数据。SubSonic 生成对象的性能是好的- 比自定义的DataSet快。 因此,你使用SubSonic不会牺牲性能。

等等,还有更多...

除了上述数据存取功能,SubSonic,还包括一些控件,使的操作数据更加容易。

最具dramatic 随SubSonic 发布的是脚手架控件。像施工的工地上的脚手架,或Ruby on Rails的脚手架,其用意是为您提供一种简单的方法来做些事情。 在SubSonic,脚手架可以轻松编辑数据表。
<subsonic:Scaffold ID="ProductsScaffold"                       runat="server"                       TableName="Products" />脚手架控件就会使本身作为一个table呈现(见图5 )并且可以编辑现有条目或增加新条目。


选择一个条目进行编辑形成一个表,并提供适当的编辑控件。 正如您所看到的,从图6 ,Posted On字段创建了一个日历控件,并且Body字段得到多行TextBox控件。


此外SubSonic脚手架控件还包括QuickTable控件,其中显示的数据是Grid格式,日历控件可以允许输入一个日期,和一个ManyToMany控件可帮助你编辑相关列,每一项都可以了,看起来非常不错,但还有括了一些控件的CSS样式元素的需要设定。

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

用SubSonic,你可能忽视了名字空间SubSonic.Sugar ,但如果你这样做,你错过了一些有用的特性。SubSonic.Sugar 没有迷人的功能,而是它提供的"杂项"的功能包括特性为:
文件操作,如在一个请求打开和阅读文件。
日期操作,如确定两个日期之间有多少工作日。
字符串操作,例如转换,以适当的情况下,或剥HTML格式。
数字操作,如确定如果一个数字是不是整数。
Web操作,如打开和阅读一个网页,或执行DNS查找。
验证操作,其中包括通用签证,万事达卡和其他常见的信用卡验证。

扩展SubSonic

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

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

总结

你 知道你有一个数据库,你需要连接到一个应用。你知不知道在页面中直接发送SQL的请求是一个坏的架构。 你知道你应该为你的应用写一数据层管理CRUD。 你真的想要得到这一切,现在做的,那你可以回家享受天伦之乐。 帮您解决所有这些在优点于一体,而不牺牲性能,可维护性和灵活性。 现在就去下载它并给它一个尝试。 你的应用会谢谢你的。

千人.NET交流群:18362376,因为有你,代码变得更简单,加群请输入cnblogs
原文地址:https://www.cnblogs.com/kingkoo/p/1688528.html