体验SubSonic

  1. SubSonic简介
  2. SubSonic配置
  3. 利用sonic.exe来生成代码
  4. 通过Substage来生成代码
  5. 简单操作示例

1.SubSonic简介

一句讲完就是:SubSonic就是一个ORM开源框架。作者是Robe Conery,用c#语言写的. SubSonic遵循了Ruby on Rails的一些准则,比如在建表时一些约定(建议每个表都加 CreatedOn[Datetime],CreatedBy[nvarchar],ModifyOn[DateTime],ModifyBy[nvarchar])...., 这些详细信息可以去参考Ruby on Rails.

该ORM框架可以支持多种数据库,包括sql server,mysql,oracle,sqlite...,最新版本是v3.0, PS:我本次测试还是用v2.2

2.SubSonic配置

我的测试环境:window 7 + sql server 2005 + vs 2010 + subsonic 2.2

配置之前,先Download Subsonic, 官方网站 MS打不开,我这里公开另一个链接,可以去下载:https://github.com/subsonic/SubSonic-3.0,github这个网站做得很像SVN一样 :)

先看看Download下来之后的目录:

根目录下包含了主dll,SubCommber目录下包含一个sonic.exe的可执行文件(基于命令行的),用来生成代码的,另一个SubStage目录下包含一个SubStage的UI工具,可以借助UI来生成代码。

预先准备数据:

1:我们在利用IDE先新建一个项目,并引用subsonic.dll

2:建立一个测试数据库(我这里用的是sql server 2005),我只建立一个表来测试

create table Customer(ID int not null identity(1,1) primary key,[Name] nvarchar(30),[Sex] bit)

3: 为生成代码做准备,第一步在项目中引入dll之后,更改web.config配置,我这里直接贴出来算了,先看第一段,这个主要就是一个section,该section由subsonic.dll的SubSonicSection来处理( PS:SubSonicSection是v2.0之后才有的,以前v1.0的时候命名为:SectionService)

注意一点:providers中的connnectionStringName必须要与web.config中的connectionstrings中的name保持一致,这样才会根据该连接串指向的数据库来生成对象。

<configSections> <section name="SubSonicService" type="SubSonic.SubSonicSection,SubSonic" allowDefinition="MachineToApplication" restartOnExternalChanges="true" requirePermission="false"/> </configSections> <SubSonicService defaultProvider="SqlDataProvider"> <providers> <add name="SqlDataProvider" type="SubSonic.SqlDataProvider,SubSonic" connectionStringName="StevenConnectString" generatedNamespace="Steven.DAL"></add> </providers> </SubSonicService> <connectionStrings> <add name="StevenConnectString" connectionString="server=steven;initial catalog=steven;user id=sa;password=123;" providerName="System.Data.SqlClient"/> </connectionStrings>

再看看第二段配置,在说这个配置之前,先说下.abp , SubSonic就是根据该abp文件来生成数据库操作对象的,该abp文件中其实也就是一个基本文本的格式,我只知道它的二种用法:

a: * 表示生成指定数据库中所有table

b: 若不需要生成所有table,可以列出要生成的table名称(每一行一个table name)

<compilation debug="true" targetFramework="4.0"> <buildProviders> <add extension=".abp" type="SubSonic.BuildProvider,SubSonic"/> </buildProviders> </compilation>

这个决定了编译器在build的时候,对.abp文件的一个处理方式,具体工作都扔给SubSonic.BuildProvider去做, 其实BuildProvider根据我们配置的 .abp文件来生成代码.

讲了这么多的 .abp,先看一图

这个abp文件很简单,内容就一个 ”*“ 号,用来生成所有操纵表的对象,其实我也就一个Customer表, ps:  该abp文件放到app_data下正好利用了编译机制(编译器在build时会对该文件夹进行build)这样才会生成代码.

3: 利用sonic.exe来生成代码

有这一步的原因是因为我在做build的时候遇到一些问题,代码没有生成成功(官方给出的解释是Trust Level原因,Subsonic必须在一个full trust宿主环境中,我试着修改trust level,

包括修改web.config, 还有利用.net framework configuation工具来修改....,到现在还没弄出来,有会的朋友知会我一声 :)

所以我干脆用sonic.exe(上面有提到)命令来工具来生成代码, vs ide工具有一个功能就是可以把外部工具给加载到“工具”菜单中来,并可以为这些外部工具提供一些输入参数,看图:

通过 "工具->外部工具..." 打开.

添加成功之后,可以看得,“工具”菜单下多了一个menu item,如下图:

直接执行sonic.exe命令,

这里一个参数 generate /out 表示生成代码,有关sonic.exe命令的其它参数可以直接运行sonic.exe 来查看。

确定之后,会根据.abp文件中包含的内容来生成DTO对象,PS:注意一点就是生成之后,在vs solution中是看不到的,必须要include进来才行。

4: 通过Substage来生成代码

这个GUI工具生成代码更强大,所以我单独拿出一节来介绍,先看看它的整体UI,

一句话简单介绍:

Substage根据project中的provide来生成代码,而provider又必须利用数据库连接串来找指定的数据库

生成代码步骤:

a: firstly, 先new project

b: 创建一个连接串,如下图:

c: 建立一个provider,并利用b中连接串,如下图:

d:最后就是生成代码了,点击toolbar中的generate code来生成,如图

可以看出来,除了根据表名生成实体外,还额外多了几个类,SPs.cs是处理存储过程的,Customer是操作Customer表的,该类中还帮我们生 成一个CustomerCollection集合类,这个功能相对于其它的ORM框架是没有的,:),  AllStruct.cs包含全部表结构. 具体详细内容需要自己慢慢去体会。

接下来看看这个工具最特殊的地方,接着生成代码之后,我们能过GUI工具Invoke一下我们的数据库结构,使所有表什么的...能够在这个左边列表菜单中显示出来,如下操作:

有了表之后,该工具提供了一个叫scaffolds(支架)的功能,我们可以通过该功能可以直接对该表进行CURD操作,来见证一下:

ps:  操作之前,需要先选择到“表”,再点击 Scaffolds tab 来看看, 它自己帮我们生成UI,我们可以直接利用UI来添加一个数据, 当然添加完成之后,还会一个展示数据的list界面,

这个不错吧,除了这些之后,还可以用把该工具当MSDN一样使用,通过Api Reference来查看

  还有其它一些功能,就不一一介绍了,需要自己去发现。

5:简单操作示例

所有工作进行完之后, 我写了一个非常简单的示例来验证一下它的正确性,代码很简单

 1 protected void Page_Load(object sender, EventArgs e)
2 {
3 if (!Page.IsPostBack)
4 {
5 BindData();
6 }
7 }
8
9 private void BindData()
10 {
11 GridView1.DataSource = Customer.FetchAll();
12 GridView1.DataBind();
13 }
14
15 protected void btnAdd_Click(object sender, EventArgs e)
16 {
17 string custName = TextBox1.Text;
18 Customer model = new Customer();
19 model.Name = custName;
20 model.Sex = chkSex.Checked;
21 model.Save();
22 BindData();
23 }

我通过Save()方法新加一个customer,然后FetchAll()取所有数据进行展示.非常简单,当然还一些其它方法如FetchByParameter,Delete,Select......这里不都介绍了,这篇文章主要目的是体验,:)

总结一下:Sobsonic只是众多ORM框架中r的一个,具体应用可以根据项目需要而定,我在现在的项目中暂时还没有发现Subsonic有很大的性能问题,相于其它ORM,我更喜欢的它的简单,而且是开源的 :),有兴趣的朋友可以多交流交流!

PS:提供大家一个游戏试玩平台,有兴趣的可以进去看下哟!http://www.juxiangyou.com/r4357700

 
 
标签: 开源框架ORM

体验SubSonic的更多相关文章

  1. 【推荐】 体验SubSonic

    SubSonic简介 SubSonic配置 利用sonic.exe来生成代码 通过Substage来生成代码 简单操作示例 1.SubSonic简介 一句讲完就是:SubSonic就是一个ORM开源框 ...

  2. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  3. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  4. TODO:小程序开发过程之体验者

    TODO:小程序开发过程之体验者 1. 小程序开发过程,先下载开发者并安装开发者工具,现在腾讯开放测试了,普通用户也可以登录开发者工具,如图普通用户登录为调试类型,但是只能建立无AppID的项目 如果 ...

  5. 微信小程序体验(2):驴妈妈景区门票即买即游

    驴妈妈因为出色的运营能力,被腾讯选为首批小程序内测单位.驴妈妈的技术开发团队在很短的时间内完成了开发任务,并积极参与到张小龙团队的内测问题反馈.驴妈妈认为,移动互联网时代,微信是巨大的流量入口,也是旅 ...

  6. 一起学微软Power BI系列-使用技巧(3)Power BI安卓手机版安装与体验

    Power BI有手机版,目前支持安卓,苹果和WP,不过没有WP手机,苹果在国内还不能用,要FQ和用就不测试了.安卓的我也也是费了九牛二虎之力才把app下载下来,把方法分享给大家. FQ太麻烦,所以建 ...

  7. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  8. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  9. Xamarin+Prism开发详解三:Visual studio 2017 RC初体验

    Visual studio 2017 RC出来一段时间了,最近有时间就想安装试试,随带分享一下安装使用体验. 1,卸载visual studio 2015 虽然可以同时安装visual studio ...

随机推荐

  1. Session中StateServer的使用方法

    最近项目中用到 Session的StateServer模式,我们知道sessionState有四种模式:off,inProc,StateServer,SqlServer. 而StateServer 是 ...

  2. 【 Android官方文件读书笔记】连接网络

    一间连接应用网络的主要功能.Android系统对网络连接进行了封装,使得开发人员可以更快的给应用添加网络功能.大多数网络连接的Android应用使用HTTP发送和接受数据.Android包含两个HTT ...

  3. 新秀学习SSH(十四)——Spring集装箱AOP其原理——动态代理

    之前写了一篇文章IOC该博客--<Spring容器IOC解析及简单实现>,今天再来聊聊AOP.大家都知道Spring的两大特性是IOC和AOP. IOC负责将对象动态的注入到容器,从而达到 ...

  4. Chromium on Android: Android在系统Chromium为了实现主消息循环分析

    总结:刚开始接触一个Chromium on Android时间.很好奇Chromium主消息循环是如何整合Android应用. 为Android计划,一旦启动,主线程将具有Java消息层循环处理系统事 ...

  5. Python3.2官方文件翻译-工具列表和十进制浮点计算

    8.7 列表工具 许多数据结构需要通过内置列表类型来满足.但,有时候在不同的性能取舍需要选择一个实现. Array模块能提供一个像列表的array对象,它只能存储同类数据而且更加简洁. 接下来样例展示 ...

  6. SQL 注意事项

    -------选择表名 配置Ctrl+3 能够select * 桌 USE [NB] GO /* 物: StoredProcedure [dbo].[SP_Select] 脚本日期: 05/28/20 ...

  7. 浅谈Hybrid技术的设计与实现(转)

    前言 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发效率的要求,这个时候使用IOS&Andriod开发一个APP似乎成本有点过高了,而H5的低成本.高效率.跨平台等特性 ...

  8. JavaEE(5) - JMS实现企业Pub-Sub消息处理

    1. 在Weblogic服务器上配置Pub-Sub消息目的 向已有的JMS模块中添加消息主题: Services-->Messaging-->JMS Modules--><Mo ...

  9. 开始折腾cocos2d-x,使用批处理来创建项目

    开始服用的时间来学习cocos2d-x该,尽管C和C++另外不咋.只是学习和记忆可能是更深层次的,现在发展: so从今天开始正式决定学会与自己的业余时间折腾吧,仅这51什么.昨天,在开发环境中建,Vi ...

  10. Java串口通信详细解释

    前言 说到开源.恐怕非常少有人不挑大指称赞. 学生通过开源码学到了知识,程序猿通过开源类库获得了别人的成功经验及可以按时完毕手头的project,商家通过开源软件赚到了钱……,总之是皆大欢喜. 然而开 ...