ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【转载】使用SubSonic生成数据访问层步骤

【转载】使用SubSonic生成数据访问层步骤

原创 Linux操作系统 作者:jyang57 时间:2010-02-13 16:35:49 0 删除 编辑

SubSonic是一个ORM框架,或者说是一个代码生成器,它的工作流程和一般的ORM工具不同,所有的工作全是自动完成,生成完整的数据访问层类库,然后在工程中引用即可使用。整个过程很简单,下面就生成数据访问层类库的过程记录如下:
    1
、建立一个c#类库工程
    2
、删除默认生成的class1.cs文件
    3
、工程添加三个引用,SubSonic.dll(前提是先安装了subsonic才会有这个)、 

System.Web和System.Configuration命名空间
    4
、在工程下建立一个文件夹,Generated

5、在工程中添加一个新文本文件,命名为:app.config,内容如下:

 

xml version="1.0"?>

<configuration>

 

  <!-- 第一部分是照着写就可以了,没有什么好说的 -->

  <configSections>

    <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>

  configSections>

 

  <!-- 第二部分是定义一个或者多个连接数据库的字符串,其中要注意的是这部分的name的值是第三部分connectionStringName属性的值-->

  <connectionStrings>

    <!-- 连接数据库的字符串 -->

    <add name="Nowthwin"

         connectionString="Data Source=.;Initial Catalog=BuySaleStorage;Persist Security Info=True;User ID=sa;"/>

  connectionStrings>

 

  <!-- 第三部分是将连接字符串和数据库驱动匹配起来成为一个连接。name是连接的名字,generatedNamespace的值是生成对象的命名空间-->

  <SubSonicService defaultProvider="Nowthwin">

    <providers>

      <clear/>

      <add name="Nowthwin"

           type="SubSonic.SqlDataProvider, SubSonic"

           connectionStringName="Nowthwin"

           generatedNamespace="Nowthwin"/>

    providers>

  SubSonicService>

 

configuration>
    4
、在vs中工具菜单中选择 “工具” -> “外部工具” 命令,定义一个外部工具菜单项,

                   标题为SubSonic DAL(也可以自己命名),

命令为SubSonic文件夹的中命令行工具sonic.exe的路径,

参数为:generate /out Generated(生成后的路径为当前路径下的Generated文件夹。),

初始目录为:$(ProjectDir),

并勾选“使用命令窗口”和“提示输入参数”两个选项,点确定。
   

 5、此时vs的工具菜单多了一项“SubSonic DAL命令,单击,然后确定。
    6
、执行完毕,在Generated文件夹中会生成你设定的数据库的类库文件,包括表、视图、存储过程的c#包装。如果出现错误,一般是因为数据库连接串有问题,请仔细检查。
    7
、把Generated文件夹下的所有文件包含到工程中,然后编译,生成类库。至此,全部工作完成,可以在项目中使用ORM操作您的数据库了,完全强类型化的数据库操作方法。
    8
、在项目中使用这个类库的时候,需要在web.config中把上面的app.config中的设置,复制到对应的小节中。
    9
、数据库修改后,只要重新生成一次类库即可,这可能就是所谓的零数据访问层代码实现吧,总之是非常方便。
  

 

以Northwind数据库为例

 

/联合查询

DataTable dt = new Select(Product.Columns.ProductName, Category.Columns.CategoryName,Supplier.Columns.CompanyName).From(Product.Schema).InnerJoin(Category.Schema).InnerJoin(Supplier.Schema).ExecuteDataSet().Tables[0];

 

______________________________________________________________________________

//子查询

DataSet dt = new Select().From(Product.Schema)

    .Where("productid").In(1, 2, 3, 4, 5)ExeCuteDataSet();

 

DataSet dt = new Select().From(Product.Schema).Where(Product.Columns.CategoryID)

            .In(

            new Select("categoryID").From(Category.Schema).Where(Category.Columns.CategoryName).IsEqualTo("Produce"))

            .ExecuteDataSet() ;

______________________________________________________________________________________________

//聚合函数使用

 

double result = new

    Select(Aggregate.Sum("UnitPrice*Quantity", "ProductSales"))

    .From(OrderDetail.Schema)

    .ExecuteScalar();

____________________________

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23155850/viewspace-662892/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 【笔记】ACID
请登录后发表评论 登录
全部评论

注册时间:2010-01-09

  • 博文量
    110
  • 访问量
    164134