SubSonic 外部工具配置到VS

来源:互联网 发布:理智与情感 知乎 编辑:程序博客网 时间:2024/04/25 16:22

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

System.WebSystem.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<double>();