开始构建数据访问层。需要考虑的事项?

时间:2010-05-03 12:57:09

标签: .net sql orm data-access-layer

我们的组织使用内联sql。我们的任务是提供一个合适的数据访问层,并且正在权衡使用哪种方式的优点和缺点......

  • 数据集
  • ADO.net
  • LINQ的
  • 实体框架
  • 亚音速
  • 其他?

我一直在使用的一些教程和文章供参考:

我非常沮丧,发现很难决定走哪条路。我们的网站是一系列2个内部门户网站和一个公共网站。我们使用的是vs2008 sp1和framework版本3.5。

请您告诉我您要考虑的因素以及您在数据访问层面临的任何专业和缺点。

PS。我发现亚音速网站的信息有点浅薄,而且很多重点似乎都放在它和开发者的“酷”之上。我更喜欢对他们的演示视频进行口头解释而不是音乐?还有其他人同意吗?

4 个答案:

答案 0 :(得分:3)

如果你可以使用.NET 4.0,我会建议实体框架4。这是一个很好的ORM,只会随着时间的推移变得更好。您可以使用Linq编写查询,插入等,这使您的语法与您当前使用的内联SQL相当接近。显然,它背后有MS,因此您可以期待现在和将来可以获得大量信息和熟练的开发人员。

如果你必须继续使用.NET 3.5,我会看看NHibernate。它比EF4整体更成熟,但目前缺乏对Linq的全面支持。虽然您可以使用Linq进行相对简单的查询,但是对于更复杂的查询,您将不得不使用类似SQL的标准API。我还将使用Fluent NHibernate来允许映射的代码内配置。它拥有强大的社区支持,并且在不久的将来应该有更好的Linq支持。它还具有开源的优势。

这些ORM中的任何一个都会负责将系统中的对象映射到数据库。这将使您能够将更多精力集中在构建应用程序逻辑上。出于这个原因,我不建议使用ADO.Net/Datasets。 Linq2Sql非常适合它的功能,但永远不会像Nhibernate或EF4那样强大。 Linq2Sql看起来似乎是MS的第一次努力,似乎被降级为实体框架的第二小提琴。

答案 1 :(得分:2)

不是一个简单的决定。我寻求简单和灵活性。例如,我不太喜欢配置NHibernate的xml文件;我不喜欢实体框架喷出的大量代码;我担心linq-to-sql的生命终结。我不介意从基类派生(有些人想要纯POCO对象)来支持映射。我还希望能够在不更改代码的情况下切换数据库,只需更改配置即可。 其他小东西都很好,例如:能够将存储过程结果映射到对象;出于性能原因选择列的子集;能够在必要时发送纯sql语句。

答案 2 :(得分:2)

  1. 数据集>你得到的东西太多。这通常被认为是在它被释放的那天超过它的主要想法。

  2. ADO.Net(或企业库)>我个人偏好有很多原因。但是,由于其他一些原因(主要是安全性),我们从不使用内联sql,因此您的里程可能会有所不同。我们采用这种方法的一个原因是我们的团队对SQL非常了解,并且每个发生器要么性能不足,要么你必须知道相当数量的sql来调整它们。有了这个选择,我们选择自己做。

  3. Linq>忽略这个。 LINQ的新开发基本停止,MS的资源转移到Entity Framework项目。我还发现框架中的线程和其他问题尚未解决。

  4. 实体框架>有些人喜欢这个。您仍然需要大量的SQL知识才能充分利用它。

  5. 亚音速等等>没有足够的经验与第三方真正告诉你利弊。

  6. 总而言之,我们更喜欢控制并拥有从中获取最大收益的知识。我们尝试过linq / EF路线并没有给人留下深刻的印象。我见过其他人,并简要地与他们合作过,但除了最基本的CRUD类型声明之外,他们都没有表现出来。

    如果您正在做的大部分内容与CRUD相关,那么EF,Subsonic或类似内容将起作用。

    评估时需要考虑的一些事项:

    • 如何处理即席查询?
    • 它如何处理数据分页/排序(SQL端还是将所有内容都拉入Web服务器)?
    • 什么是内存泄漏?
    • 线程是否需要?编写一个简单的应用程序来测试您正在评估的每个应用程序。在不同的内存/ CPU条件下运行它很多。
    祝你好运。

答案 3 :(得分:1)

现在提出的问题有点含糊不清。 “数据层”可以包含许多,许多,许多不同的需求和愿望。

我认为SQL Server是后备数据库。但它是唯一的吗?数据层的同质性如何?

您是否只是在寻找一种查询和获取数据的简单方法?或者您是否需要完整的对象关系映射解决方案?除了查询之外,您还有什么需求吗?例如迁移和脚手架?

您是否愿意或能够预先牺牲时间来学习更复杂(但更灵活)的工具集,例如NHibernate或Subsonic?

在使用EF,Linq to SQL,Subsonic和NHibernate进行不同程度的复杂工作之后,一开始并没有“难”开始,但找到更复杂的问题或边缘情况的解决方案将因各自而异。有人可以说EF和NH拥有最多的用户,因此有点容易找到博客/ Stackoverflow帖子来回答你的问题。在这方面,我有更好的运气与EF / NH。也就是说,Subsonic是一个更平易近人的代码库,用于卷起袖子并修复自己的问题(IMO)。

就个人而言,在完成了几次运行后,我现在的首选是始终启动w /我认为最简单的解决方案 - Linq to SQL。我发现它的进入障碍是最低的,它是最不具侵略性的。然而,它具有显着的限制(例如依赖于SQL服务器)。但是为了快速肮脏,只需完成工作,这是我最喜欢的,因为我宁愿不花费过多的时间来担心我的数据层。只有一次有需求才会考虑转移,我会考虑离开 - 最近的项目需要读/写SQLite和SQL Server,因此我们去了NH。

了解您实际需要的内容可能有助于从通用评论中找出答案。