SQL Server 2000DBAVisual Studio 2005.NET 2.0SQL Server 2005C# 2.0IntermediateDevVisual StudioSQL ServerWindows.NETC#
使用 SubSonic 创建 DAL






3.94/5 (21投票s)
使用 SubSonic 创建 DAL。
引言
在典型的数据驱动应用程序中,您可以预计将花费至少 40-50% 的时间编写“CRUD”代码(创建、读取、更新和删除)。为了松散地耦合您的应用程序代码与数据库,您可能需要创建一个 DAL(数据访问层)。不幸的是,编写 DAL 可能非常耗时。特别是当您处理一个数据模型不断演变的开发项目时。
幸运的是,有 SubSonic。SubSonic 是一个为 .NET 构建的开源工具,它将在几个简单的步骤中自动构建您的 DAL。
构建 DAL
- 第一个任务是从 www.subsonicproject.com 下载并安装 SubSonic。
- 打开 Visual Studio 2005 并创建一个新项目。选择 Visual C# --> Windows --> Windows Control Library。
- 项目创建后,您需要添加三个引用。第一个是 SubSonic.dll。如果您进行了默认安装,它应该位于 C:\Program Files\SubSonic\SubSonic 2.0.3\SubSonic.dll。您还需要对
System.Web
(不幸的是,这是一个必需项)和System.Configuration
的引用。 - 现在,您需要添加一个应用程序配置文件。在配置文件中,您将需要添加一个连接字符串、一个配置节和一个提供程序节。这是一个示例“SubSonic”配置文件
- 向解决方案添加一个名为“Generated”的新文件夹。这是所有生成代码将创建的地方。虽然这不是必需的,但强烈推荐。该文件夹很有用,因为一旦您对数据模型和生成的代码满意,就可以将其移到一个单独的文件夹,作为您的“生产就绪”代码。由于 SubSonic 是一个代码生成工具,您可以选择多次生成文件并覆盖“Generated”文件夹中的源文件,而不会影响“生产就绪”文件。文件生成后,它们不会自动包含在库中,因此拥有这个额外的文件将不会使您的 DLL 膨胀。这是因为 Visual Studio 将忽略未包含在项目中的文件,因此这些文件不会被编译到程序集中。
- 现在,是时候运行 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”按钮关闭对话框。
- 现在,激动人心的时刻到了。通过单击“Tools”菜单下的“SubSonic DAL”菜单项来执行 sonic.exe。请密切关注输出窗口,以便查看执行状态。如果您设置有误,输出窗口通常会提供有关如何修复错误的线索。
- 如果一切顺利,您应该会在 Generated 文件夹中看到一堆新文件。如果您没有看到任何文件,则可能需要单击“Solution Explorer”顶部的“Show all files”按钮。选择所有文件,右键单击并选择“Include In Project”。现在编译,瞧!您已经创建了您的第一个 SubSonic DAL!
<?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
属性来更改默认命名空间。
使用 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 不仅节省大量时间,而且免费、开源且非常易于使用。您还能要求什么呢?