SQL 数据库表中的 C# 类

Posted

技术标签:

【中文标题】SQL 数据库表中的 C# 类【英文标题】:C# class from a SQL database table 【发布时间】:2008-10-20 21:21:34 【问题描述】:

遇到了这个:

http://www.eggheadcafe.com/articles/adonet_source_code_generator.asp

想知道这是否是正确的解决方案,因为我不太喜欢为每个存储过程创建一个类,或者我是否将 Enterprise Library 用于 ASP.net 2.0 项目。

【问题讨论】:

【参考方案1】:

您绝对不应该为每个存储过程都创建一个类。您可以采用多种方法来处理数据库交互。你应该好好看看那里的主要框架,然后决定哪一个最适合你。 Castle Project 解决方案很棒,它依赖于 nHibernate (nHibernate)。 LINQ 是 Mircrosoft (LINQ Project) 提供的类似产品。这两种解决方案都是完整的 ORM 框架(对象关系映射),并将生成动态 SQL 以将您的对象持久保存在数据库中。每个人都有自己的怪癖,并喜欢您以特定方式构建对象。如果您不想管理系统使用的 SQL,我肯定会推荐其中一种方法。

我来自数据库背景,并且更喜欢对我的 SQL 进行更多控制。特别是我喜欢让我的交互由存储过程处理。我发现这使我能够更好地控制 SQL 以进行优化,但可以帮助我以更友好的方式管理数据库安全性。为了适应这种方法,我推荐 iBatis (iBatis) 之类的方法。 iBatis 不是一个完整的 ORM,而是一个简单的 SQL 映射器。我的方法的缺点是您需要编写更多代码 (SQL),但我不介意这种权衡。

【讨论】:

【参考方案2】:

是否有可能升级到框架 3.5?如果是这样,请查看 LINQ to SQL 和实体框架,因为这将为您完成很多工作。

如果不是,那么只要它生成的标准代码不会将您绑定到 3rd 方库中,那么您当然可以使用它。在我的工作场所,我们有自己的与此类似的生成器,它运行良好,尽管我们很快将转向 LINQ to SQL。

【讨论】:

无法升级和使用 LINQ To Sql。有点卡在 .NET 2.0 世界里。【参考方案3】:

在 C# 类中包装数据库表的方法有很多种;在您链接到的选项和实体框架之间进行选择之前,您可能需要调查一些选项。

有一种称为“活动记录模式”的软件模式准确地描述了这种方法 - 每个表都有一个 C# 类,具有诸如 Customer.GetById()、Customer.Save() 等加载/保存方法。

对于 ASP.NET 2.0,请查看 Castle Project's ActiveRecord implementation 和名为 ActiveWriter 的第三方 Visual Studio 插件工具,该工具可让您使用拖放界面为表生成类包装器。

【讨论】:

【参考方案4】:

您需要确定在什么时候需要由表组成的数据集,以及您是否希望 SQL 使用存储过程生成这些数据集,或者您的业务逻辑层是否会处理这些数据集。正如 Dr8k 所说,nHibernate 会为您创建 SQL,但 nHibernate 有一个学习曲线。 ORM 将控制您获取数据的方式,并且根据您的环境和 DBA 的舒适度,您可能需要克服其他问题。

如果您更熟悉 SQL,那么还有一个名为 SubSonic 的工具会为您创建包装器(如 Active Record),同时还为您提供使用存储过程的能力。如果您无法使用 LINQ,也可以使用具有流畅界面的不错的查询工具。

【讨论】:

以上是关于SQL 数据库表中的 C# 类的主要内容,如果未能解决你的问题,请参考以下文章

sql多表查询出来的数据在C#中用啥装载比较好,是泛型集合还是集合??还有其他的可以装吗??

使用 c# 将 MS Access 表数据添加到 SQL Server 表中

C#中如何用Linq在SQL Server的表中多列检索多个关键字

使用 c# winforms 将数据更新/保存到 SQL 数据库表

c#如何获取数据库中某个表中的其中一个字段的多条值

C#操作sqlite数据库表中的boolean项