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

Rails 风格的 C# .NET 模型基类,使用 ODBC 连接

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2009年2月10日

GPL3

4分钟阅读

viewsIcon

24734

downloadIcon

117

这是一个基类,可用于通过 C# .NET 中的 ODBC 创建数据库连接的模型对象。

引言

Rails 能够快速崛起成为应用领域中的佼佼者是有充分理由的——它快速、可靠且易于理解。 不幸的是,它的伙伴 Ruby 却没那么友好。 我们大多数在类似 C 语言的世界中长大的人会发现,要切换到类似 Basic 的语言有点困难。 但是,由于它带来的所有好处,我们妥协了,并决定投入时间和精力来学习一些对我们来说几乎完全陌生的东西。

为 C 语言风格的语言开发 Rails 风格的 MVC 框架的想法并不新鲜。 PHP 有多种选择——CakePHP、Symfony 等。 对于 C# 开发人员来说,寻找解决方案更具挑战性,所以这是我尝试提供的一个。 虽然它不是一个完整的 MVC 框架,但它具有 Rails 中模型类可用的功能要点。

背景

Rails 中模型类背后的想法是自动将数据库表中的列映射到类的成员。 从表中访问和操作数据就像检索和设置类成员的值一样容易。 DDSModel 基类通过简化的函数调用和 C# 的索引器功能提供了一些这些功能。

此代码可能不适用于大型数据库表。 此外,它目前不支持复合主键,并且与 Rails 不同,它不提供处理关系的功能。

使用代码

要使 DDSModel 有用,您必须首先创建另一个从它继承的类。 您需要对这个新类做的最基本的事情是设置要与之关联的表的名称和该表的主键。 通过将字符串值传递给基本构造函数来执行此操作。

class MyDataClass : DDSModel
{
    public MyDataClass ()
        : base("my_table_name", "my_primary_key")
    {

    }
}

在这一点上,您还可以决定为您的类添加更多方法以获得特殊功能。

要在表中创建新行,请从您创建的类实例化一个新对象,并设置表中一个或多个列的值。 最后,调用 save() 函数以完成您的新行并实际将其插入数据库。

MyDataClass data = new MyDataClass(); 
data["column_1"] = "1";
data["column_2"] = "Hello World";
data.save();

请注意,索引器接受字符串值,因此如果您打算从整数值保存,则需要进行强制转换/解析。 此外,对于未设置的列,将自动传递 "NULL"。

要检索行的值,请使用以下两种方法之一

MyDataClass data = new MyDataClass(); 

// Retrieving a specific record
data.find( 2 ); // Retrieves the record with the primary key value 2
int val = int.Parse( data["column_1"] );

// Retrieving a set of records based on a particular column's values
data.findBy( "name", "foobar", "", "", 0, 0 );
data.iterate(); // Move cursor to the first row
val = int.Parse( data["column_1"] );

// Retrieving a set of records matching an SQL condition
data.findAll( "name = 'foobar'", "", "", 0, 0 ); // Use exact SQL condition syntax
data.iterate(); // Move cursor to the first row
val = int.Parse( data["column_1"] );

以下描述了 findByfindAll 函数的其他参数,从 findBy 的参数 3 和 findAll 的参数 2 开始。

排序依据列 指定用于排序的列名
排序方向 使用 DDSModel.SORT_ASCENDINGDDSModel.SORT_DESCENDING
起始索引 指要检索的第一条记录的索引
记录计数限制 指要显示的最大记录数

iterate() 函数用于将光标移动到下一条记录。 如果结果集中没有更多行,则返回 false。 如果您想显示或处理结果集中的所有记录,请使用此方法。

更新记录只是检索和插入记录的组合。 首先,检索您要更新的记录(使用前面提到的方法)。 然后,为要更改的每个字段设置一个值。 最后,执行 save() 以将该行更新到数据库。

最后,要删除一行,请使用上面提到的任何方法检索您要删除的记录。 然后,只需执行 delete() 即可将其从数据库中删除。

如果您的需求未被任何提供的函数满足,您还可以执行 query(),传递一个 SQL 语句。 此函数将返回一个包含查询结果集的 OdbcDataReader

关注点

虽然我本来想完全模仿 Rails 处理数据库表的方式,但我认为这根本不可能,因为 Rails 背后发生的所有“魔法”,我在一个月左右的使用时间里都无法弄清楚。 等我有了更多自己的时间,我会研究 Rails 代码并尝试再次弄清楚。 但是,就目前而言,我认为这应该足够了。 我希望有人觉得这有用!

历史

  • 版本 0.1 - 尚未完全测试。 仅在“开发中”的项目上进行了测试。 我很感谢您对这个第一个版本的反馈。
© . All rights reserved.