65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 SubSonic 创建 DAL

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.94/5 (21投票s)

2007年11月8日

CPOL

4分钟阅读

viewsIcon

125110

downloadIcon

1181

使用 SubSonic 创建 DAL。

引言

在典型的数据驱动应用程序中,您可以预计将花费至少 40-50% 的时间编写“CRUD”代码(创建、读取、更新和删除)。为了松散地耦合您的应用程序代码与数据库,您可能需要创建一个 DAL(数据访问层)。不幸的是,编写 DAL 可能非常耗时。特别是当您处理一个数据模型不断演变的开发项目时。

幸运的是,有 SubSonic。SubSonic 是一个为 .NET 构建的开源工具,它将在几个简单的步骤中自动构建您的 DAL。

构建 DAL

  1. 第一个任务是从 www.subsonicproject.com 下载并安装 SubSonic
  2. 打开 Visual Studio 2005 并创建一个新项目。选择 Visual C# --> Windows --> Windows Control Library。
  3. 项目创建后,您需要添加三个引用。第一个是 SubSonic.dll。如果您进行了默认安装,它应该位于 C:\Program Files\SubSonic\SubSonic 2.0.3\SubSonic.dll。您还需要对 System.Web(不幸的是,这是一个必需项)和 System.Configuration 的引用。
  4. 现在,您需要添加一个应用程序配置文件。在配置文件中,您将需要添加一个连接字符串、一个配置节和一个提供程序节。这是一个示例“SubSonic”配置文件
  5. <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
       <configSections>
          <section name="SubSonicService" 
                   type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
       </configSections>
       <connectionStrings>
          <add name="AdventureWorks" 
            connectionString="Data Source=.;Database=AdventureWorks;
                              Integrated Security=true;"/>
       </connectionStrings>
       <SubSonicService defaultProvider="AdventureWorks">
          <providers>
             <clear/>
             <add name="AdventureWorks" type="SubSonic.SqlDataProvider, SubSonic" 
               connectionStringName="AdventureWorks" 
               generatedNamespace="AdventureWorksDAL"/>
          </providers>
       </SubSonicService>
    </configuration>

    注意:您可以通过修改 generatedNamespace 属性来更改默认命名空间。

  6. 向解决方案添加一个名为“Generated”的新文件夹。这是所有生成代码将创建的地方。虽然这不是必需的,但强烈推荐。该文件夹很有用,因为一旦您对数据模型和生成的代码满意,就可以将其移到一个单独的文件夹,作为您的“生产就绪”代码。由于 SubSonic 是一个代码生成工具,您可以选择多次生成文件并覆盖“Generated”文件夹中的源文件,而不会影响“生产就绪”文件。文件生成后,它们不会自动包含在库中,因此拥有这个额外的文件将不会使您的 DLL 膨胀。这是因为 Visual Studio 将忽略未包含在项目中的文件,因此这些文件不会被编译到程序集中。
  7. 现在,是时候运行 sonic.exe 了。如果您进行了默认安装,sonic.exe 将位于 C:\Program Files\SubSonic\SubSonic 2.0.3\SubCommander\sonic.exe。运行 sonic.exe 的最简单方法是将其添加为 VS2005 环境的外部工具。这可以通过转到 Tools-->External Tools 并单击“Add”按钮来完成。在 Title 字段中,我输入了“SubSonic DAL”,但您可以随意命名。在 Command 字段中,输入 sonic.exe 的路径。在 Arguments 字段中,输入“generate /out Generated”。这意味着所有生成的代码都将在我们上一步创建的名为 Generated 的文件夹中创建。最后,将 Initial Directory 设置为“$(ProjectDir)”。同时勾选“Use Output Window”和“Prompt for Arguments”复选框。单击“OK”按钮关闭对话框。
  8. Screenshot - external_tool_dlg.jpg

  9. 现在,激动人心的时刻到了。通过单击“Tools”菜单下的“SubSonic DAL”菜单项来执行 sonic.exe。请密切关注输出窗口,以便查看执行状态。如果您设置有误,输出窗口通常会提供有关如何修复错误的线索。
  10. 如果一切顺利,您应该会在 Generated 文件夹中看到一堆新文件。如果您没有看到任何文件,则可能需要单击“Solution Explorer”顶部的“Show all files”按钮。选择所有文件,右键单击并选择“Include In Project”。现在编译,瞧!您已经创建了您的第一个 SubSonic DAL!
  11. Screenshot - show_all_files.jpg

使用 DAL

您已经正式创建了您的第一个 SubSonic DAL。现在,您可能想知道……我该如何使用这个东西?嗯,这里有一些代码片段示例。

示例 1 - 获取所有 ListPrice 大于 50.00 美元、Class 值为 L 且 Color 为 Yellow 的产品。
Query qry = Product.CreateQuery().WHERE("ListPrice > 50.00")
            .AND("Class = L").AND("Color = Yellow");
IDataReader rdr = qry.ExecuteReader();

while (rdr.Read()) {
   Console.WriteLine(rdr[Product.Columns.Name].ToString());
}

请注意我如何链式调用 where 条件!

示例 2 - 添加一个新产品。
Currency c = new Currency();
c.CurrencyCode = "CPD";
c.Name = "Code Project Dollar";
c.Save("Some_UserName"); 

技巧与思考

如果您需要扩展类的功能,请使用部分类。这样,当您重新生成文件时,就不必担心自定义代码被覆盖。

该产品声称可以与其他数据库系统一起使用。如果您正在创建一个跨多个数据库系统的应用程序,这个库可能会非常有益。理论上,只需付出一点努力和基本的专业知识,您就可以将应用程序从 SQL Server 迁移到 Oracle,而无需更改代码。您只需重新编译您的 DAL 以适应新的 RDBMS(远程数据库管理系统)。请记住,我说的是理论!如果这不起作用,请不要给我发恨的邮件。

最后,SubSonic 不仅节省大量时间,而且免费、开源且非常易于使用。您还能要求什么呢?

© . All rights reserved.