来自SQL数据库表的C#类

时间:2008-10-20 21:21:34

标签: c# .net orm .net-2.0

碰到了这个:

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

并且想知道这是否是正确的解决方案,因为我不是为每个存储过程创建一个类的粉丝,或者我使用Enterprise Library for ASP.net 2.0项目。

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

是否有可能升级到框架3.5?如果是这样,请看一下LINQ to SQL和Entity Framework,因为这将为您完成很多这样的事情。

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

答案 2 :(得分:0)

在C#类中包装数据库表的方法有很多种;您可能希望在选择链接到的实体框架和实体框架之前研究一些替代方案。

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

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

答案 3 :(得分:0)

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

如果您对SQL更熟悉,那么还有另一个名为SubSonic的工具,它将为您创建包装器ala Active Record,同时为您提供使用存储过程的能力。还有一个很好的查询工具,如果你不能使用LINQ,你可以使用它。