SubSonic:一个数据层构建器(BLL)

导言

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

SubSonic是什么?

SubSonic是一个数据访问构建器。他还是一个auto-magic 的对象关系映射(ORM)工具,帮助你快速建立一个网站。

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

SubSonic配置

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

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

一个SubSonic配置节

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

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

在Web.config的中添加下表内容,注意< configSections >元素必须是 configuration 元素的第一个子元素。其中节就是通用的连接字符串

name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic"

allowDefinition="MachineToApplication" restartOnExternalChanges="true"

requirePermission="false"/>

removeUnderscores="false" stripTableText="Global_,Account_,_tb,Form_"

stripViewText="Global_,Account_,_vw,Form_" fixPluralClassNames="false"

/>

里的参数说明:

generatedNamespace="Northwind"  设定生成代码命名空间,修改为你希望的命名空间;

connectionStringName="数据库连接"  使用数据库的连接字符串,修改为你要使用的数据库连接字符串;

excludeTableList="^aspnet_Applications$,^aspnet_Membership$,^aspnet_Paths$"

不生成aspnet_Applications, aspnet_Membership, aspnet_Paths这三个表相关代码;

generateODSControllers="false" 不生成Controllers类;

removeUnderscores="false" 不移除生成对象名称下划线;

stripTableText="Global_,Account_,_tb,Form_" 生成表相关对象名称开头如果与设定值匹配则去掉;

stripViewText="Global_,Account_,_vw,Form_" 视图名处理与与上面表处理相同;

fixPluralClassNames="false"  不去除类名的复数s

当有多个节点时,可以用下面的方法再添加一个,注意加上这个节点

获取数据

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

微软SQL SERVER 2000或2005,包括Express版本

Oracle

MySQL

SQLite

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

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

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

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

Subsonic2.1使用

1.引用命名空间

如果生成代码文件是Northwind(web.config中generatedNamespace="Northwind",如上面配置)在使用文件中引用

using Northwind;

2.插入记录

如下代码可在表Region中插入一条记录

Region.Insert(10, "TestSubsonic2.1");

3.修改记录

a.单个记录修改,下面代码可修改上面刚插入的记录

Region region = new Region(10);

region.RegionDescription = "TestSubsonic_Update";

region.Save();

b.批量更新

Query q = Region.Query();

q.AddWhere(Region.Columns.RegionDescription, "test");

q.AddUpdateSetting(Region.Columns.RegionDescription, "TestSubsonic");

q.QueryType = QueryType.Update;

q.Execute();

上面代码把所有RegionDescription值为test 的记录修改为TestSubsonic

4.删除记录

a.删除单个记录

Region.Delete(10);

删除主键值 RegionID 为10的记录

b.批量删除

Query q = Region.Query();

q.AddWhere(Region.Columns.RegionDescription, "test");

q.QueryType = QueryType.Delete;

q.Execute();

以上代码删除所有RegionDescription值等于test的记录

5.查询数据

Query q = Region.Query();

q.AddWhere(Region.Columns.RegionID, Comparison.GreaterOrEquals, 2);

DataTable dt = q.ExecuteDataSet().Tables[0];

以上代码获取Region表中RegionID >= 2 的数据表

Query q = Region.Query();

q.AddWhere(Region.Columns.RegionDescription, Comparison.Like, "te" + "%");

DataTable dt = q.ExecuteDataSet().Tables[0];

以上Like查询,返回所有RegionDescription列值以te开头的记录表

6.获取对象集合

RegionCollection coll = DB.Select().From("Region").Where("RegionId")

.IsGreaterThan(2).ExecuteAsCollection();

int id = coll[0].RegionID;

string description = coll[0].RegionDescription;

以上代码获取RegionId > 2 的Region对象集合coll后,就可以操作对象数据值

SubSonic基本操作

查询

SubSonic2.1版本 – 列出3种查询。

Product product = new Select().From().Where(Product.ProductIDColumn).IsEqualTo(4)

.ExecuteSingle();

Product product = DB.Select().From().Where("ProductID").IsEqualTo(4)

.ExecuteSingle();

Query query = new Query(Product.Schema);

query.WHERE("ProductID=4").ORDER_BY("ProductID asc");

IDataReader dr = Product.FetchByQuery(query);

DataSet product = new   Query(Product.Schema).WHERE("ProductID=4").ORDER_BY("Prod  uctID asc")

.ExecuteDataSet();

关联查询

DataSet product = new Select(Product.ProductNameColumn,Category.CategoryNameColumn).From()

.InnerJoin(Category.CategoryIDColumn, Product.CategoryIDColumn)

.Where(Category.CategoryIDColumn).IsGreaterThan(4).ExecuteDataSet();

注意. InnerJoin(f2, f1) 的使用方法。

分页查询

List products = new Select().From()

.Where(Product.ProductIDColumn).IsEqualTo(4).Paged(1, 30).ExecuteTypedList();

查询—返回对象

ExecuteReader();   返回DataReader

ExecuteScalar();   返回对象

ExecuteScalar();  返回泛型对象

ExecuteSingle(); 返回表实体对象

ExecuteTypedList();  返回泛型表实休数据集

ExecuteDataSet();  返回DataSet

ExecuteJoinedDataSet(); 返回关联查询 DataSet

Execute(); 返回执行后,数据更新条数

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 表示括号

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();

SQL:WHERE 1 > @1AND 2 >= @2 AND (3 < @3) AND (4 <= @4 AND 5 LIKE @5) AND (6 LIKE @6)

修改

Product product = new Product(4);

product.ProductName = "amo";

product.Save();

int i = new Update(Product.Schema)

.Set(Product.ProductNameColumn).EqualTo("Chai -- Amo")

.Where(Product.ProductIdColumn).IsEqualTo(1)

.Execute();

添加

Product product = new Product();

product.ProductName = "my xiaoli";

product.SupplierID = 1;

product.CategoryID = 1;

product.Discontinued = true;

//............

product.Save();

int i = new Insert().Into(Product.Schema,

"ProductName",

"SupplierID",

"CategoryID",

"Discontinued“

)

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

删除

int i = new Delete ().From()

.Where(Product.ProductIDColumn). IsEqualTo(1)

.Execute();

事务1

List queries = new List();

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"));

//execute in a transaction

SqlQuery.ExecuteTransaction(queries);

事务2

using (SharedDbConnectionScope sp = new SharedDbConnectionScope())

{

using (TransactionScope scope = new TransactionScope())

{

// coding....

scope.Complete();

}

}

减少对ActiveRecord的依赖

MyProduct product = new Select(

Product.ProductNameColumn,

Category.CategoryNameColumn

).From()

.InnerJoin(Category.CategoryIDColumn, Product.CategoryIDColumn)

.Where(Category.CategoryIDColumn).IsGreaterThan(4)

.ExecuteSingle();

string cname = product.CategoryName;

string pname = product.ProductName;

自定义MyProduct实体类

public class MyProduct : ActiveRecord {

public string CategoryName {

get { return GetColumnValue(Category.Columns.CategoryName); }

set { SetColumnValue(Category.Columns.CategoryName, value); }

}

public string ProductName {

get { return GetColumnValue(Product.Columns.ProductName); }

set { SetColumnValue(Product.Columns.ProductName, value); }

}

}

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

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

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

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

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

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

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

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

扩展SubSonic

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

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

总结

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

来源:http://ctfysj.blog.hexun.com/32587843_d.html

subsonic mysql_Subsonic 介绍相关推荐

  1. Subsonic介绍及使用

    官方网站:http://subsonicproject.com/ 介绍原文:http://www.keyusoft.cn/(S(3wcpdjv14wpvdr55i3bidx55))/Default.a ...

  2. Subsonic 介绍

    原文:Introduction to SubSonic 介绍了SubSonic,一个数据层构建器 导言 一 个易维护的应用程序,不同的类之间有不同的分工,通常分为界面层.业务层和数据访问层.虽然这一技 ...

  3. SubSonic介绍和相关文章

    介绍了SubSonic,一个数据层构建器 导言 一 个易维护的应用程序,不同的类之间有不同的分工,通常分为界面层.业务层和数据访问层.虽然这一技术有利于更好地组织应用,一些开发人员不愿这么做.创建 一 ...

  4. subsonic 3.0 mysql_SubSonic 3.0新特性

    1.引言 大多数数据访问程序包提供从"数据库外"访问,意思是这种方式将您的数据库的表在应用程序中用对象表示.这种方式可以在大多数案例中工作,但是关系理论与面向对象编程将变的不一致, ...

  5. Subsonic介绍

    SubSonic,一个数据层构建器 导言 一 个易维护的应用程序,不同的类之间有不同的分工,通常分为界面层.业务层和数据访问层.虽然这一技术有利于更好地组织应用,一些开发人员不愿这么做.创建 一个可靠 ...

  6. Subsonic设置--新手上路

    前言 在刚开始使用中就碰到问题:按照官方的方法配置,总是不能编译时自动生成数据访问层代码(其中一种,也可使用命令行自己生成,下面介绍).本文只要介绍了这两种配置subsonic的方法. 1.配置方法 ...

  7. bltoolkit mysql_.NET 轻量级 ORM 框架 - Dapper 介绍

    转自:https://blog.csdn.net/hanjun0612/article/details/52170204 Dapper简单介绍: Dapper is a single file you ...

  8. SubSonic的配置方法

    在刚开始使用中就碰到问题:按照官方的方法配置,总是不能编译时自动生成数据访问层代码(其中一种,也可使用命令行自己生成,下面介绍).本文只要介绍了这两种配置subsonic的方法. 1.配置方法 自动在 ...

  9. SubSonic的配置方法浅谈

    在刚开始使用中就碰到问题:按照官方的方法配置,总是不能编译时自动生成数据访问层代码(其中一种,也可使用命令行自己生成,下面介绍).本文只要介绍了这两种配置subsonic的方法. 1.配置方法 自动在 ...

最新文章

  1. CSS3 Flexbox 弹性盒与 css3 阴影效果的演示
  2. linux安装trac+svn+apache+wike,windos中Trac+apache+svn的安装与配置
  3. Oracle数据库监听配置|转|
  4. 编写java的应用_编写Java应用程序
  5. 修复Net4.0在IE11下doPostBack无效的问题
  6. 1、ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别
  7. 第十六篇 Python之迭代器与生成器
  8. 如何准确获取地点位置的经纬度?
  9. java下载文件下载不动_JAVA实现文件下载,浏览器端得到数据没反应
  10. 苹果APP Store应用上架流程
  11. html 跑步比赛小游戏,小班游戏教案:跑步比赛
  12. VSAN磁盘组更换硬盘
  13. bzoj 2563阿狸和桃子的游戏
  14. %s %*s %*.*s
  15. LaTex(PART III)命令环境和简单的数学公式、插图、表格
  16. c语言屏幕输出函数相关题,C语言上机考试题目
  17. 20162316刘诚昊 17年10月9日测验“排序课堂测试”
  18. 驾校招生报名预约学车小程序开发制作
  19. 这几种常见的保护电路,你都了解吗?
  20. 计算机二级vb重点知识,2017计算机二级VB考试重点知识

热门文章

  1. 【Matlab 控制】仿真多智体一致性分析,附代码
  2. linux下的access()函数判断文件是否存在、打印时间
  3. 【PC工具】更新!windows图片文字识别软件,天若OCR免费文字识别软件
  4. 好好学python·集合
  5. Ubuntu16.04安装opencv-3.4.2
  6. 写在方法中的路由跳转
  7. caioj 1158 欧拉函数
  8. 学历是铜牌,能力是银牌,人脉是金牌,思维是王牌——有感
  9. asp.net 中文编码问题
  10. 提取HTML代码中文字的C#函数