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

Subsonic、MySQL 和 DAL DLL

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.20/5 (6投票s)

2008年5月16日

CPOL

7分钟阅读

viewsIcon

56081

使用 Subsonic 和 MySQL 创建 DAL DLL。

引言

在本文中,我尝试解决在使用 SubSonic 通过 DLL 生成 DAL 时,同时使用 MySQL 作为数据库的一些特殊问题。你可能会问为什么?仅仅因为 WWW 上的大多数代码示例都涵盖了 SQL Server,并且未能显示使用 SubSonic 本身时出现的问题。

目录

  1. 什么是 Subsonic?
  2. 为 MySQL 配置 Subsonic
  3. 在 Visual Studio 2008 中配置 Subsonic
  4. 生成输出并将其包含到你的项目中
  5. 管理配置文件(基本编译问题)
  6. 动态自定义提供程序(多个动态提供程序)

1. 什么是 SubSonic?

Subsonic 是一个帮助网站自行构建的工具集。它的核心是

  • 一个数据访问层 (DAL) 构建器,不需要你编写任何代码,它在编译时自行构建,具有完整的对象层和强类型集合
  • 一个完整的实用工具集,包括 Rails 般的脚手架、迁移(数据库版本控制)和代码生成器
  • 一个动态查询工具,允许你使用 SQL Server 和 Enterprise Library,而无需了解 SQL
  • 一个 OR Mapper,可扩展到视图和存储过程,因此你不会被锁定在 OR/M 机制中

话虽如此,Subsonic 是一个紧密耦合的 DAL 构建器,允许对表示数据库的数据类进行几乎像 SQL 一样的交互。但这不就是 LINQ 提供的吗?但目前还没有稳定的 MySQL 提供程序。

继续...

2. 为 MySQL 配置 SubSonic

Beta 版有效 - 2.1 Beta 2(2008 年 3 月 13 日)

我尝试了很多次,但无法让当前稳定版本的 Subsonic 正常工作,因为我一直收到以下错误

"System.InvalidOperationException: Connection must be valid and open"

根据我的调查,这似乎涉及 Subsonic 中找到的 _MySql.Data.dll_ 和 SubCommander 实用程序的更新。我的观点是,使用 Beta 版,它能工作!

下载、安装

你可以从官方网站下载并安装 Beta 版,这是链接

启动新项目

2008-05-15_185029.png

创建新项目并选择“类库”,然后为其命名。

添加 DLL

接下来,添加 Subsonic 的引用 - 它们可以在你的 Program Files 目录中找到。

2008-05-15_185414.png

只需要以下内容

  1. _MySql.Data.dll_(只使用 Subsonic 子目录中的此副本)
  2. SubSonic.dll

开个好头,现在我们只需设置配置文件来构建我们的类库或 DAL。但在那之前,让我们将 Subsonic (Commander) 作为 Visual Studio 2008 中的外部工具的一部分,以便于使用。

3. 在 Visual Studio (2008) 中配置 SubSonic

配置外部工具

  1. 在“工具”菜单下,单击“外部工具”。
  2. 现在单击“添加”以创建新的菜单内容。
  3. 2008-05-16_072621.png

  4. 将“标题”命名为任何你喜欢的名称。在我的情况下,标题是“Subsonic DAL”。
  5. 其次,将“命令”文本框指向 SubSonic Program Files 文件夹中找到的“SubCommander”可执行文件。文件名为“_Sonic.exe_”。
  6. 完成后,添加初始参数。请注意,"/out Generated" 会将所有输出转储到指定“初始目录”位置内新创建的文件夹“_Generated_”中。
  7. “初始目录”应指向你的项目主目录。展开带箭头的选项卡以查找 VS2008 中的其他环境变量。
  8. 还有其他可用参数,请随时在 Subsonic 主页上阅读它们。完成最后一步后,单击“确定”,Visual Studio 2008 中你的一个选项卡式工作区中应该会出现一个新按钮。

单击此按钮将自动启动 DLL 的构建/生成过程,但首先我们需要一个配置文件。

4. 生成并包含输出

我们还没有完成,但是一旦你成功生成了 DAL,它将在你的项目中生成一个不可见的文件夹。要将此文件夹包含到你的项目中,请单击“项目”菜单并选择“显示所有文件”。

然后你会注意到“_Generated_”文件夹(如果这是你想要的输出文件夹),右键单击并选择“包含在项目中”,然后就完成了。

2008-05-16_104552.png

5. 管理配置文件

基本配置文件

配置文件或多或少是自解释的,因此无需深入探讨配置本身。Subsonic 的配置文件需要三部分

配置节服务定义

连接字符串配置

此部分仅仅是你希望从中生成 DAL 的数据库定义。提供程序名称对 Subsonic 很重要,以确保使用正确的库来访问 MySQL 数据库。在上述情况下,我排除了“密码”,你可能需要它。

与连接字符串相关的提供程序配置设置

这是 Subsonic 服务及其提供程序的实际定义,它们指向上述连接字符串。整个配置指向一个多数据库配置选项,我之所以提及这一点,是因为我曾为此挣扎了一段时间,只为获得正确的配置。

提示:你可能会注意到,与 Subsonic 文档中上述“提供程序部分”(c) 不同的是,“类型”已从“ActionPak”重命名为“SubSonic”。为什么?它以前名为 ActionPak,现在命名空间已更改。

编译问题(命名空间,多个 DAL)

提示。值得注意的一点是,除非你的数据库中的所有表都包含“主键”,否则 Subsonic 不会为你生成 DAL。据我所知,这是一个设计决策,围绕着某种完整性标准而不是没有。

提示。如果你打算使用不同的数据库来生成 DAL,那么重要的是要知道你至少需要从构建的数据库中获取架构,以便你可以操作 Subsonic API。我将在“多个提供程序”部分进一步解释这一点,请记住这一点。

提示。有时,一旦你包含了生成的类库,你可能会遇到编译时问题,我遇到的两个问题都与以下冲突有关

  1. 一个从名为 System 的表生成的类,与 .NET 的 System 命名空间冲突。所以我将该表从项目中排除,或者你可以删除它,或者重命名你的表。
  2. 这与 .NET 相关,它不允许变量名以数字开头,在这种情况下,你的数据库中可能有名为“1stEscalation”或“2ndEscalation”的字段。解决此问题的方法是使用 Visual Studio 中“查找”弹出菜单下的“替换”功能,在这些变量前面插入一个字符或字母。在我的情况下,所有“1st”都被重命名为“_1st”。

6. 动态自定义提供程序

使用多个提供程序

为了能够使用多个提供程序,你需要能够获取要使用的表或对象的架构,然后实际进行数据调用。要访问配置中指定的多个数据提供程序(例如,Helpdesk 和 Super),请查看此代码

2008-05-16_153420.png

我们不需要直接访问表对象,而是需要使用 Query 类来构建和访问数据。在上述情况下,第一个参数是我们数据库中的表名,第二个是上面配置文件 (_App.config_) 中定义的提供程序名称。

现在第二行使查询成为可能,因为 Subsonic 在从数据库操作和获取数据之前需要表架构。

使用 MySQL 数据库中的连接字符串构建动态提供程序

现在,如果你的环境中有多个数据库,那么维护一个包含所有连接字符串的 _App.config_ 绝不是实际的。因此,正如我们开发人员经常做的那样,我们将连接字符串放在数据库表中。这是构建内存中数据提供程序的代码

2008-05-16_160513.png

第一步是创建我们可以使用的提供程序,在我们的例子中,这是使用 SubSonic API 类 DataProvider 创建的。请注意,在创建具有 MySqlDataProvider 类型的数据提供程序新实例时,有两个参数。

下一个有趣的重点是连接字符串的格式。Subsonic 期望它们看起来像上面配置文件中指定的那样;这与通常的“Driver={Driver...}”连接字符串不同。代码如下所示(感谢 Andre)

2008-05-16_161301.png

最后,我们只需创建新的 Query 类,使用新的内存中提供程序进行实例化,然后就完成了。

好了!!!!

© . All rights reserved.