关于用实体框架替换企业库数据访问块的建议
Posted
技术标签:
【中文标题】关于用实体框架替换企业库数据访问块的建议【英文标题】:Advice on replacing Enterprise Library Data Access Block by Entity Framework 【发布时间】:2011-06-21 05:45:25 【问题描述】:几年前,我们开发了一个大型 ASP.Net 应用程序 (C# / .net 3.5),它必须是“数据库引擎”非依赖的(这意味着这个应用程序可以使用 SQL Server、Oracle、mysql ...作为数据库引擎)。为此,我们使用了 Enterprise Library Data Access Block 4.1。
但现在,由于我们处于“性能/可扩展性改进”阶段,我们正在考虑对我们的应用程序基础进行技术升级或重新设计。
所以,问题是:迁移到实体框架有什么好处吗? EF 是否会保留我们不依赖的“数据库引擎”标准?还是我们应该保留我们的 EntLib DAAB 实施,但升级到最新版本 (5.0)?
谢谢
【问题讨论】:
如果企业图书馆数据访问块非常适合您,何必费心改变。来自 MS 和社区的大多数实体框架示例都是基于 SQL 服务器的,我不确定其他框架有多强大。 【参考方案1】:迁移到实体框架有什么好处吗?
通常可以更快地完成您的数据访问工作。 linq语法很棒,可以查询sql。
EF 是否会保留我们不依赖的“数据库引擎”标准?
没有一些3rd party 支持。虽然我没有遇到任何开发人员实际上采用了一个正常运行的应用程序并将数据库技术切换到 sql 或从 sql 切换。
或者我们应该保留我们的 EntLib DAAB 实施,但升级到 最新版本 (5.0)?
DAAB 太棒了!!我为它写了一个代码generator。此外,在为具有非常差的关系模式的大型数据库实施 EF 后,我发现 EF“向导”需要很长时间才能更新,110 个 sql 表需要 3 分钟(大约)。它太慢了,我又回到了 DAAB ......我会说前进的方向是 EF。我只是尝试将它与存储过程和无跟踪一起使用以获得最佳performance。使用 EF 要注意的另一件事是当两个人分别更新实体时合并冲突。它可能会让人感到困惑。
【讨论】:
【参考方案2】:它们之间的最大问题不是数据库独立性,而是使用模式根本不同。数据访问块 (DAAB) 主要是围绕 ADO.NET 的便捷包装器。它使调用存储过程变得更容易/更不烦人,但您仍在处理数据集或数据读取器。它实际上并没有改变你与数据库交互的方式,只是让它不那么烦人。
另一方面,实体框架是关于数据建模和对象关系映射的。它的工作水平比 DAAB 更高;您根据对象编写代码,而不是根据 DataSet 或 DataReaders。它自动“实现”数据库中的对象,因此您无需编写代码、维护它们之间的关系等。这是一种功能更全面但完全不同的数据库工作方式。
您需要先考虑是否要转向 ORM 样式的数据访问。从那里您可以决定 EF 或 .NET 空间中的许多其他 ORM 之一是否最适合您的需求。
有很多可用于 EF 的提供程序(请参阅 Devart 的答案以获取列表),但它们都是外部/额外费用。框中唯一的一个用于 Sql Server。虽然我要补充一点,DAAB 实际上并没有完全涵盖“数据库独立性”的东西——如果你的 DAAB 调用中有任何实际的 SQL,它并不能帮助你解决 SQL 方言的差异。英孚会。
【讨论】:
【参考方案3】:Oracle(Devart dotConnect for Oracle、DataDirect)和 MySQL(Devart dotConnect for MySQL、MySQL Connector /NET)有许多 EF 提供程序,Microsoft 为 SQL Server 提供了实体框架提供程序,所以应该没有数据库独立性问题。
【讨论】:
感谢您的回答,但来自常见问题解答:you must disclose your affiliation in your answers。以上是关于关于用实体框架替换企业库数据访问块的建议的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# .Net 访问 SQL Server 数据库的最佳方式