早在2003年,我开始制作使用PHP数据库的Web应用程序。当然,我开始只是将SQL查询直接放在我的代码中,而不是使用存储过程,预处理语句或任何类型的ORM框架。但是那时候这是一种常见的做法,正如我今天正在编写的代码(一个围绕那个时间构建的VB.Net Web应用程序)所证明的那样。
应用程序直接在代码中使用了大约十二个存储过程,一些预处理语句和大量SQL查询。通常,有冗余的代码块可以获得连接,运行SQL查询(字符串),然后使用阅读器使用硬编码的字段名称提取数据。现在是2011年,写这种代码很容易,因此在2003年流行,但我猜这不是最好的做法。它不安全或不易维护,我没有触及存储过程。
我想超越应用程序中的硬编码sql查询并手动解析响应中的数据。在.Net中创建数据库应用程序的当前最佳实践和工具是什么?我听说过Linq2SQL,实体框架,NHibernate和其他一些技术,但我不知道它们何时应该被使用,或者它们是否仍然是最新的。
我正在使用Visual Studio 2010,VB / C#和SQL Server 2008 Express
编辑:看起来大多数人都在讨论ORM软件。这听起来像我想要的;我们有几个表,其中包含许多可以作为对象访问的信息。我什么时候应该使用标准查询或准备好的声明?
答案 0 :(得分:3)
实体框架和NHibernate都是所谓的对象/关系映射器。它们都生成一个桥接对象和数据库之间差距的层(有时称为Object Relational Impedance Mismatch)。
我不建议使用足够的OR / M.任何一个都是好的; NHibernate在安全方面有一点优势,但似乎确实有更陡峭的学习曲线。我个人使用实体框架,但这只是一个偏好的问题。
这两个框架都有一个规定,当你无法完成你需要完成的工具时,你可以直接回调并执行存储过程,这样你在这方面是安全的。
LINQ2SQL是一种面向数据库的技术,但它有资格作为OR / M.我会直接跳到EF。 EF是.Net 3.5 SP1的一部分,找到here。
以下是使用EF从数据库中检索客户的一些代码示例:
using (var ctx = new DBEntities())
{
var employee = (from e in ctx.Employees
where e.User.UserName == userName
select e).FirstOrDefault();
}
在我看来,使用OR / M的另一个原因是它们倾向于将代码的设计视图提升为一流的工件。我的意思是你最终得到了一个很好的图形视图,你可以看到你的实体之间的关系(因为编辑器是拖放的),当你最终达不到时,你不会放弃它。
这是MS关于入门的链接:http://msdn.microsoft.com/en-us/library/bb386876.aspx。
HTH。
答案 1 :(得分:1)
尝试LLBLGen:http://www.llblgen.com/defaultgeneric.aspx
他们有一个简单的用户界面,可让您指向您的数据库,并在几分钟内立即为您生成所有DAL。设置和集成比我看到的任何其他ORM产品容易得多。它也是可定制的,但我还没有完成定制工作。需要在那里找到更多信息。
答案 2 :(得分:0)
您使用object relational mapping (ORM)技术的预感很好;有一些框架(正如你所提到的那样)支持它们,它们以动态方式(例如,没有存储过程,即时生成查询)和非动态方式(存储过程等)轻松地与数据交互
您了解了ORM技术的当前情况,以下是每种技术的一些差异细分。
基于Java Hibernate项目的开源项目。它非常活跃,并且对许多场景都有很好的支持。
虽然没有正式死亡,但公开表示开发的重点不在于LINQ-to-SQL。这项工作将针对LINQ-to-Entities。虽然使用LINQ to Entities通常是一个更好的主意(如果在这个和那个之间做出选择),那么就存在问题;模型生成并不像有些人想的那样干净,the metadata mapping model that they use doesn't allow you to use models from different designers easily以及NHibernate很久以前可能遇到的其他问题。
目前,.NET中首选的数据访问方法(不仅仅是设计人员支持和VS.NET中的集成,而是在RIA等框架中),这也是MS在处理时需要投入精力的方法。 ORM空间。它目前处于第二次重大迭代(第一次发现很难被许多人使用),易用性肯定会增加。
我还希望将来与其他MS技术集成。
无论如何,这三种技术都允许您以一种将对象模型返回给您的方式公开存储过程,而不是您已解析/使用字符串查找的数据集。
他们还将处理您必须将数据往返数据库的情况;他们每个人都以不同的方式去做。