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

    体验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

  • 相关阅读:
    利用dockerfile定制镜像
    发布Docker 镜像到dockerhub
    Docker 停止容器
    133. Clone Graph
    132. Palindrome Partitioning II
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    127. Word Ladder
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3876645.html
Copyright © 2011-2022 走看看