繁体   English   中英

.Net中的数据库应用程序最佳实践

[英]Database applications best practices in .Net

早在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软件。 这听起来像我想要的; 我们有几个表,其中包含很多可以作为对象访问的信息。 什么时候应该改用标准查询或预备语句?

实体框架和NHibernate都称为对象/关系映射器。 它们都生成一个弥合对象与数据库之间的鸿沟的层(有时称为“ 对象关系阻抗不匹配” )。

我不建议使用足够的OR / M。 哪一个是好的? NHibernate在安全性方面有优势,但是它的学习曲线似乎更为陡峭。 我个人使用实体框架,但这确实只是一个优先事项。

这两个框架都为您提供了何时无法完成使用该工具所需完成的准备工作,并且您可以回调并直接执行存储过程,因此在这方面是安全的。

LINQ2SQL是一种面向数据库的技术,但它具有OR / M的资格。 我会直接跳到EF。 EF是.Net 3.5 SP1的一部分,可在此处找到。

这是一些使用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/zh-cn/library/bb386876.aspx

HTH。

尝试LLBLGen: http ://www.llblgen.com/defaultgeneric.aspx

它们具有简单的UI,可让您指向数据库,并在几分钟之内立即为您生成所有DAL。 安装和集成比我看到的任何其他ORM产品都容易得多。 它也是可定制的,但是我仍然没有做太多定制。 需要自己找到更多信息。

您有使用对象关系映射(ORM)技术的直觉。 有一些框架(如您所述)在其后方具有支持,这些框架使以动态方式(例如,无需存储过程,即时生成查询)和非动态方式(存储过程等)与数据交互变得容易。

您介绍了ORM技术的当前情况,下面是每种技术的一些区别的分解。

NHibernate的

一个基于Java Hibernate项目的开源项目。 它非常活跃,并且在许多情况下都具有强大的支持。

LINQ转SQL

尽管尚未正式死亡,但已公开声明开发重点不会放在LINQ-to-SQL中。 这项工作将针对LINQ到实体。 与LINQ to Entities合作通常是一个更好的主意(如果在两者之间进行选择),但存在一些问题。 模型生成并不像某些人想像的那样干净,他们使用的元数据映射模型不允许您轻松地使用来自不同设计师的模型 ,以及NHibernate很久以前就已经解决的其他问题。

LINQ到实体

目前,.NET中首选的数据访问方法(不仅是VS.NET中的设计人员支持和集成,而且在RIA等框架中也是如此),这就是MS在处理ORM空间时将投入的精力。 它目前处于第二次主要迭代中(第一次发现很难被许多人使用),易用性肯定有所提高。

我还将寻找将来与其他MS技术的集成。


无论如何,所有这三种技术都将允许您以一种将对象模型返回给您而不是为之解析/使用字符串查找的数据集的方式公开存储过程。

他们还将处理您必须将数据往返返回数据库的情况。 他们只是各自以不同的方式去做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM