zoukankan      html  css  js  c++  java
  • 体验SubSonic

      最近在项目中用到了SubSonic,忍不住拿出来share下.

    阅读目录:

    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:简单操作示例

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

    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,我更喜欢的它的简单,而且是开源的 :),有兴趣的朋友可以多交流交流!

    最后,附上我的代码,点击此处下载

  • 相关阅读:
    腾讯分析系统架构解析
    GreenPlum简单性能测试与分析--续
    我的一些提高效率的设置
    Windows 上借助注册表来修改键盘按键的映射
    WPF入门——Converter、XAML和Style
    30个极大提高开发效率的Visual Studio Code插件(转)
    USB PD充电
    macOS Mojave 美化一下终端
    WPF入门(4)——资源
    使用Duilib开发Windows软件(5)——使用VLC做视频播放
  • 原文地址:https://www.cnblogs.com/repository/p/1999128.html
Copyright © 2011-2022 走看看