菜鸟先飞

2009年4月7日 #

[转]Subsonic介绍及使用

官方网站:http://subsonicproject.com/

介绍原文:http://www.keyusoft.cn/(S(3wcpdjv14wpvdr55i3bidx55))/Default.aspx?Page=SubSonic&AspxAutoDetectCookieSupport=1

使用原文:http://www.cnblogs.com/EricGu/archive/2008/07/23/1131467.html

SubSonic是一个类似Rails的开源.NET项目。你可以把它看作是一把瑞士军刀,它可以用来构建Website和通过ORM方式来访问数据。Rob Conery和Eric Kemp是推动SubSonic的主要开发人员,与项目良好的发展有着密切的关系。 
作为一个开发人员生产力工具,SubSonic通过从基础上支持软件开发的迭代本质,自动化了数据驱动的应用程序开发中重复性的、无趣的过程。通过这个自动生成的Web-Based的数据操纵的“架子”,轻量级和灵活的查询工具,以及一个不断丰富功能的用于通用业务数据验证和转换需要的类库,SubSonic让开发人员可以快速的构建他们的应用程序,而不是一些支撑的基础系统。 
SubSonic支撑着几个开源项目,如dotnetkicks.com,并且目前正被集成到一个顶级的ASP.NET的博客平台上。使用SubSonic的既有业余开发的个人应用程序,也有一些500强企业。 
SubSonic 是一个应用程序工具集,主要功能是完整生成数据访问层。与其他一些对象关系映射 (ORM) 框架不同,SubSonic 不是在运行时执行基于反射的映射,而是直接生成和编译数据访问层(因此,有些人把它称为代码生成工具而非 ORM)。 
与其他 ORM 相比,SubSonic 采用独有的方法将表格映射至域模型。NHibernate(另一个用于 .NET 的 ORM)是先指定模型(或业务实体),然后通过 XML 属性或 .NET 属性将这些实体映射至数据库。SubSonic 是在两者之间进行切换并根据数据库架构创建模型。这两种方法各有优缺点,具体使用哪一种通常由个人偏好决定。 
为获得完整的数据库模型,应安装 SubSonic 并通过 web.config 文件中的一些设置在应用程序中对其进行配置。该模型由与表格同名的简单类组成,其中包含适用于所有常用数据库操作的方法。例如,“产品”表将转换成“产品”类,并具有如 Save、Destroy 和 Where 之类的方法,后者用于查询数据库。复杂查询会使用独立查询对象。 
与大多数 ORM 工具不同,SubSonic 提供了一种妥善的方式来处理存储过程。存储过程可以封装入单个类中,象调用方法一样调用这些过程。还支持访问视图。 
除了 ORM 这个最主要的功能,SubSonic 还包括许多其他帮助程序函数和控件。其中一个更有用的控件是 Scaffold,它使快速启用和运行应用程序变得简单—虽然您可能不会在生产代码中使用这个控件,但它是构建原型的理想选择。还有一些更有用的帮助程序方法主要用于验证,它们的验证方法包罗万象(数字、仅限字母、邮政编码、每种主要信用卡等)。 
Subsonic是一个工具组,能够帮助网站构建自己的数据层。其核心包括

  • 一个不需要你写任何代码就能实现的数据层,它在编译的时候自动构建你需要的全部对象和对象的强类型集合。
  • 一组完整的实用工具,实现类似Rails的scaffolding功能,migrations (DB Versioning)(不太清除这个词的准确翻译,可移植的数据层?),和代码生成工具;
  • 一个动态查询工具,通过它你不需要了解Sql就可以使用SqlServer和微软的企业库;
  • 一个关系对象映射工具,该工具可扩展使用视图和存储过程,更加灵活;
Subsonic可以帮你做什么:
  • 缩短你的开发周期。不仅仅是因为在开发初期帮你自动生成了代码,并且在你需要迁移数据库时也不需要重写数据层。
  • 你可以选择完全采用ORM(关系对象映射),也可以使用存储过程和视图。我们没有企图告诉你怎么做,因为你已经知道怎么做最好。我们只是想给你一些帮助。
  • 帮助你的应用自动构建。通过我们的代码生成器(类,脚手架,批处理类batch-class),在很短的时间内你的站点就可以实现自动构建。然后脚手架控件(scaffolding)会帮助你很快实现数据处理。
  • 一个可扩展的坚实的基础。我们的新手站点已经集成了多种特性,包括ASP.NET membership,AHAX,3列弹性XHTML布局主题,和用户管理页面。这些至少需要一个星期的工作,现在已经完成了!
  • 在很短的时间内把你的项目从设想实现为原型。这就是这个工具的强大所在——使用新手站点你可以快速实现敏捷的原型(后面难以翻译附原文 using our starter kit you can have a sharp prototype up and running in the merest fraction of what it used to take.)

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

 

 

1.1. 第一章 SubStage的使用

  • 目前使用的substage是subsonic 2.1 beta2.2版本,它与subsonic 2.1 beta2.1最大的差别是能够实现把生成的实体文件放到指定项目中,少了beta2.1中复制粘贴功能。substage的功能是自动生成数据库文件,当数据库结构改变后,只要重新生成实体文件就可以了,而不需要向Ibatis那样修改文档!但是自动生成的数据库操作方法是有限的,大部分方法需要我们构建!(假设我们在此阶段连接的是一个数据库中的一个表blog_students,生成的providers名为test,生成的命名空间是test,生成的数据库实体名为:blogstudent,系统自动去掉了下划线_和复数s)

1.2. 第二章 使用subsonic

1.2.1. 引入文件
1.2.2. 配置web.config文件
    <configSections>      <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" />    </configSections>    <connectionStrings configSource="connectionStrings.config"/>    <SubSonicService defaultProvider="test">      <providers>         <clear/>         <add name="test" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="test"         generatedNamespace="test" />      </providers>   </SubSonicService>    <compilation debug="true">        <buildProviders>          <add extension=".abp" type="SubSonic.BuildProvider, SubSonic" />        </buildProviders>        <assemblies>           <add assembly="*"/>        </assemblies>    </compilation>
  • 其中,configSource="connectionStrings.config",connectionStrings.config是项目中的config文件,也可直接写链接字符串。 connectionStrings.config中可以写入连接多个数据库配置:
    <connectionStrings>      <add name="test" connectionString="Data Source=(local); Database=test; Integrated Security=true;"/>      <add ...>      ......   </connectionStrings>
1.2.3. 使用
  • 在项目文件中引入实体的命名空间using test;这样,便可以进行各种操作了。
    • 基本操作如下:
  • insert
    • blogstudent.Insert

(数据库各字段值);

  • delete

单个数据删除: blogstudent.Delete("id",2);

批量数据删除:

Query q = blogstudent.Query();q.WHERE("name=xuxiuyun");q.QueryType = QueryType.Delete;q.Execute();//也可:Query q = new Query("blog_students");q.BuildDeleteCommand();q.WHERE("id", 9).WHERE("name","xuxiuyun");q.Execute();
  • update

单个数据更新:

blogstudent=new blogstudent("id");blogstudent.name="xxy";blogstudent.save()

批量数据更新:

Query q = BlogStudent.Query();q.WHERE("name=ssssss").AddUpdateSetting("name", "xuxiuyun");q.QueryType = QueryType.Update;q.Execute();

不仅能够实现各种select语句的交互式参数输入,而且能够实现数据的分页功能:

Query q = BlogStudent.Query();q.WHERE("name=sssss");q.QueryType = QueryType.Select;q.PageSize = 2;q.PageIndex = 3;//其中pageIndex从1开始.

 

Database Query Tool :http://www.wekeroad.com/query1.htm

Website Starter Kit : http://www.wekeroad.com/starterintro.htm

Getting Started : http://www.wekeroad.com/ss_setup2.html

posted @ 2009-04-07 17:56 胥子维 阅读(340) 评论(0) 编辑

2009年3月30日 #

(转)ASP.NET自定义控件组件开发

posted @ 2009-03-30 21:25 胥子维 阅读(235) 评论(0) 编辑

2009年3月18日 #

对任意select语句进行分页的通用存储过程(SQL2005)

Code

posted @ 2009-03-18 09:55 胥子维 阅读(2530) 评论(10) 编辑

2009年3月8日 #

aLinq使用经验总结与累积

 aLinq安装

前三步参照
http://www.cnblogs.com/ansiboy/archive/2009/02/22/1395818.html

之后参照
http://www.cnblogs.com/ansiboy/archive/2009/02/23/1396807.html

-----------------------------------------------

ALinq.DataContext db = new ALinq.DataContext(Server.MapPath("qh.mdb") );

在 ALinq 1.6.1.0 中

连接access数据库时一定不能改变mdb的扩展名,否则将无法识别而报错

 ------------------------------------------------

 


posted @ 2009-03-08 15:02 胥子维 阅读(205) 评论(0) 编辑

2009年3月5日 #

(转)PHP根据表结构生成数据库操作类的属性

原文:http://bbs.mambochina.net/viewthread.php?tid=5181

-----------------------

最新更新,自动生成类。

使用:释放到web根下。
拷贝你的configuration.php和database.php到释放出的目录下。
执行create_simple_class.php
鼠标点击上面的select,再选表,类就会自动出现在下面的框子里。


生成这个东西
//    `id` int(11) NOT NULL default '0'
         var $id;
//  `published` tinyint(1) default NULL
         var $published;
//  `name` varchar(200) default NULL
         var $name;
//  `imageurl` varchar(200) default NULL
         var $imageurl;
//  `style` varchar(50) default NULL
         var $style;
//  `ad` tinytext
         var $ad;
源代码

<style>
body{font-familyotum Courier New;rfont-size:14px;}
</style>
<RE>
<?php
$str = "  
  `id` int(11) NOT NULL default '0',
  `published` tinyint(1) default NULL,
  `name` varchar(200) default NULL,
  `imageurl` varchar(200) default NULL,
  `style` varchar(50) default NULL,
  `ad` tinytext,
  `summary` text,
  `type` int(11) default NULL,
  `runaddress` varchar(100) default NULL,
  `trafficguide` tinytext,
  `bookingtel` varchar(50) default NULL,
  `bookingtax` varchar(50) default NULL,
  `averageconsume` int(7) default NULL,
  `runtime` varchar(200) default NULL,
  `restdate` varchar(100) default NULL,
  `totalseat` varchar(20) default NULL,
  `paymethod` varchar(100) default '1',
  `park` varchar(30) default NULL,
  `service` varchar(50) default NULL,
  `boxcosts` varchar(9) default NULL,
  `homepage` varchar(100) default '0',
  `ordering` int(11) default NULL,
  `memo` tinytext,
  `created` datetime default NULL,
  `created_by` int(11) default NULL,
  `modified` datetime default NULL,
  `modified_by` int(11) default NULL,
  `publish_up` datetime default NULL,
  `publish_down` datetime default '0000-00-00 00:00:00',
  `hits` int(11) default NULL,
  `access` int(11) default '0'";
$arr = explode(',',$str);

for($i=0;$i<count($arr);$i++)
{

//------  // INT(11) AUTO_INCREMENT
//-----  var $id=null;
$subarr = explode('` ',$arr[$i]);
$head = str_replace(""r"n","",$arr[$i]);
$head = "//".$head.""n";

$end = str_replace("`","",$subarr[0]);
$end = str_replace(" ","",$end);
$end = str_replace(""r"n","",$end);
$var = "         var "$".$end.";"n";
echo $head.$var;



//print_R($subarr);
//print_R( $arr);
//$rea = "/ `/i";
//$re = "/` +.*/i";
//$splitpos = strpos($arr[$i],'` ');
//echo $splitpos;
//$subheadstr = substr($arr[$i],0,$splitpos);
//echo $subheadstr;
//die;
/*preg_match($rea,$arr[$i],$mata);
print_R($mata);
preg_match($re,$arr[$i],$matches);
print_R($matches);die;
*/
}

?>

posted @ 2009-03-05 11:25 胥子维 阅读(81) 评论(0) 编辑

(转)如何得到 Sql数据库中所有表名,和字段属性以及字段说明信息


1.使用SQL-DMO  

  2.数据库存在sysdatabases中,用户表存在sysobjects中,xtype为U,系统表是S;列信息存在syscolumns中,和表的关系是id

 -------------------------------

 

sp_help什么什么的。。好像可以。    
  要不用ado的Recordset的OpenSchema

----------------

exec   sp_tables  
------------------------------------------

select   *   from   sysobjects   where   type   =   'U'Top

------------------------------------用系统存储过程:  
  打开你要查的数据库如:  
  open   [youdatabasename]  
  再执行  
  exec   sp_tablenames   可以。

posted @ 2009-03-05 00:49 胥子维 阅读(300) 评论(0) 编辑

(转)得到Access数据库中的所有表名

Code

posted @ 2009-03-05 00:41 胥子维 阅读(179) 评论(0) 编辑

2009年3月4日 #

Asp.net ViewState初探(转载)

posted @ 2009-03-04 12:50 胥子维 阅读(152) 评论(0) 编辑

ViewState剖析(转载)

posted @ 2009-03-04 12:49 胥子维 阅读(138) 评论(0) 编辑

NVelocity 模板中引用Request (转)

posted @ 2009-03-04 11:21 胥子维 阅读(78) 评论(0) 编辑