1. EF的代码更加简洁易维护和编程 ->> 你能详细说明吗?.. 这是因为下面的#2吗?
EF是一种对象关系映射器(ORM),它将自动生成与数据库架构相关的对象,就像#2中所述。EF是数据访问层的开箱即用抽象,当前版本实现了仓储库模式。这为您带来了诸如LINQ、对象图CRUD操作以及EF团队认为通过.NET访问数据的最佳实践等好处。
开箱即用的功能和与数据库(特别是SQL Server)的易于集成性可以提供更易于维护和编程的方法。然而,在某些情况下,使用ORM可能不是最佳选择,您应该使用审慎判断。以下是一些需要考虑不使用ORM的情况(特别是在您的团队缺乏当前EF知识时):有限的数据查询、非复杂的应用程序、熟悉编写或使用数据访问层、您的应用程序截止期限紧迫等。请参见下面我提到的其他选项。
2. 如果您需要更改数据库架构,您可以最小化需要修改应用程序中的代码的影响 ->> 如果存储过程的参数和返回字段被更改了怎么办?EF仍然可以最小化影响吗?
是的,EF基于EDMX文件生成,这只是您的数据库架构的XML文件。这包括更新映射到您存储过程的对象(注意:如果使用Code First,直到EF6发布为止,这是不适用的)。您可以更改存储过程,EF可以获取更新的架构并更新您的代码。但是,您将需要修复在调用EF存储过程方法时更改了参数的代码。您还可以使用LINQ to SQL,如果对EF不熟悉,它将提供存储过程调用作为对象方法。
3. 数据集很糟糕,特别是在WCF场景下(它们增加了处理内存中数据操作的开销) ->> 你能解释更多吗?
数据集(DataSets)在WCF情况下表现不佳,因为它们会为处理内存中数据操作增加负担。数据集是一种.NET Framework的组件,用于在内存中保存和维护数据之间的联系,并支持对这些数据执行多种操作。然而,当涉及大量数据时,数据集可能会导致性能问题和内存泄漏。相反,使用ORM框架如EF或Dapper能够更好地处理数据操作,同时减少内存开销和提高性能。
"DataSets suck"这个说法显然是一个泛泛而谈的陈述。你应该在.NET中使用DataSets来处理内存中的数据,因为这正是它们设计的初衷。由于DataSets是在内存中进行操作的,因此在进行简单的CRUD操作时效率较低。建议使用存储过程和数据读取器(在读取完数据后记得关闭它们)来实现与SQL数据库的高效读取。
除了EF之外,还有其他的选择:
自己动手 - 编写存储过程,使用数据读取器,并映射到POCO对象
使用动态库 - Dapper、ServiceStack ORM Lite、Simple POCO、Simple Data、Massive
使用LINQ to SQL - 更轻量级的数据访问层(仅适用于SQL Server)
其他ORM - NHibernate是最佳选择。