【推荐】 体验SubSonic
- SubSonic简介
- SubSonic配置
- 利用sonic.exe来生成代码
- 通过Substage来生成代码
- 简单操作示例
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:简单操作示例
所有工作进行完之后, 我写了一个非常简单的示例来验证一下它的正确性,代码很简单
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindData();
}
} private void BindData()
{
GridView1.DataSource = Customer.FetchAll();
GridView1.DataBind();
} protected void btnAdd_Click(object sender, EventArgs e)
{
string custName = TextBox1.Text;
Customer model = new Customer();
model.Name = custName;
model.Sex = chkSex.Checked;
model.Save();
BindData();
}
我通过Save()方法新加一个customer,然后FetchAll()取所有数据进行展示.非常简单,当然还一些其它方法如FetchByParameter,Delete,Select......这里不都介绍了,这篇文章主要目的是体验,:)
总结一下:Sobsonic只是众多ORM框架中r的一个,具体应用可以根据项目需要而定,我在现在的项目中暂时还没有发现Subsonic有很大的性能问题,相于其它ORM,我更喜欢的它的简单,而且是开源的 :),有兴趣的朋友可以多交流交流!
PS:提供大家一个游戏试玩平台,有兴趣的可以进去看下哟!http://www.juxiangyou.com/r4357700
【推荐】 体验SubSonic的更多相关文章
- 体验SubSonic
体验SubSonic SubSonic简介 SubSonic配置 利用sonic.exe来生成代码 通过Substage来生成代码 简单操作示例 1.SubSonic简介 一句讲完就是:SubSoni ...
- 【CEDEC 2015】【夏日课堂】制作事宜技术篇,新手职员挑战VR Demo开发的真相
日文原文地址 http://www.4gamer.net/games/277/G027751/20150829002/ PS:CEDEC 2015的PPT有些要到10月才有下载,目前的都是记者照片修图 ...
- Atom:优雅迷人的编辑神器
对于热爱markdown写作的人来说,Atom同样是一款拥有无穷魅力的写作软件.我不怕它无法满足你的需求,就怕你不给一个机会了解它,那么,这将是一场遗憾的错过. 大学的时候,坊间对那些编程高手有一个令 ...
- OceanBase 2.x体验:推荐用DBeaver工具连接数据库
Original MQ4096 [OceanBase技术闲谈](javascript:void(0) 2020-01-15 OceanBase 2.x体验:推荐用DBeaver工具连接数据库 Ocea ...
- 2022年了有哪些值得推荐的.NET ORM框架?
前言: 最近有很多同学问我.NET方面有哪些好用的ORM框架,我觉得这方面的介绍网上应该会介绍的比较全面文章,于是我想搜一篇全面的介绍文章发给他们结果我发现网上说来说去基本上就是那几个,于是就有了这篇 ...
- 移动端之Android开发的几种方式的初步体验
目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...
- 微信小程序体验(2):驴妈妈景区门票即买即游
驴妈妈因为出色的运营能力,被腾讯选为首批小程序内测单位.驴妈妈的技术开发团队在很短的时间内完成了开发任务,并积极参与到张小龙团队的内测问题反馈.驴妈妈认为,移动互联网时代,微信是巨大的流量入口,也是旅 ...
- 一起学微软Power BI系列-使用技巧(3)Power BI安卓手机版安装与体验
Power BI有手机版,目前支持安卓,苹果和WP,不过没有WP手机,苹果在国内还不能用,要FQ和用就不测试了.安卓的我也也是费了九牛二虎之力才把app下载下来,把方法分享给大家. FQ太麻烦,所以建 ...
- 推荐一个ASP.NET网站内容管理系统源码
许多人都有各自的兴趣,如打球.踢毽子.看书.看电视.玩游戏等等....我近来迷上了猜灯谜,于是业余做了一个在线猜灯谜的网站:何问起谜语. 先出个谜语让你猜猜:不可缺一点(打一字).可以在线猜:http ...
随机推荐
- SSD S.M.A.R.T
经过多年HDD硬盘厂商的完善,S.M.A.R.T已经形成了一些标准,但对于SSD来说,大多数S.M.A.R.T都是自定义的,以至于每个厂商所提供的参数并不一致,但大体都会参考HDD S.M.A.R.T ...
- 深入GCD(五):资源竞争
概述我将分四步来带大家研究研究程序的并发计算.第一步是基本的串行程序,然后使用GCD把它并行计算化.如果你想顺着步骤来尝试这些程序的话,可以下载源码.注意,别运行imagegcd2.m,这是个反面教材 ...
- Weblogic调优
优化说明: 一.Weblogic服务程序设置: 1.设置JDK内存: 修改weblogic\user_projects\domains\base_domain\bin下的setDomainEnv.cm ...
- vim列块操作
一.可视模式 进入可视模式有三种方法:v,V,CTRL+V (1)按v启用可视模式,能够按单个字符选择内容,移动光标能够选择. 如: (2)按V启用可视模式,立马选中光标所在行.按单行符选择内容.移动 ...
- Android入门常见问题
前言: 眼下非常多人入门用android studio,可是我觉得这是 一个不好的開始. 一个集成的软件,不用你去部署.那么你就好难去学习究竟层的东西. 以后的问题时.问题所在还是在底层,就像&quo ...
- python实现QQ机器人(自己主动登录,获取群消息,发送群消息)
一次偶然的机会我看见了一个群里的一个QQ号总是依据你所发的消息自己主动回复,当时非常感觉到奇妙.我知道能够模拟登录站点,没想到居然也能模拟登录QQ,首先自己想到的就是怎样实现模拟登录PC端的QQ, 開 ...
- vue 实现 扫二维码 功能
前段时间一直在研究,如何通过 vue 调用 相机 实现 扫一扫的功能,但是查看文档发现,需要获取 getUserMedia 的属性值,但存在兼容性问题. 退而求其次,通过 h5plus 来实现. 1. ...
- PHP-MySQL,PHP-MySQLi,PDO的差异
PHP-MySQL是PHP操作MySQL数据库最原始的Extension ,PHP-MySQLi的i代表Improvement ,提供了更加高级的功能,就Extension而言,本身也增加了安全性.而 ...
- CXF发布在Web服务
1.下载apache-cxf-3.1.4,将jar引入新工程中. 2.People.java package com.soap.server; import java.util.Date; impor ...
- 多媒体开发之---h264快速运动估计算法
#include "stdio.h"#include "stdlib.h"#include "malloc.h"#include " ...