我一直在研究将 Microsoft 的实体框架用于工作中的项目。我创建了一个简单的小数据层解决方案,它具有 IDataService 接口,因此我可以使用 Linq-to-Entity 编写标准 ADO.Net 实现和实体框架版本。
我创建了两个测试,它们请求完全相同的数据,但使用不同的实现。查询很简单,它们从表中检索数据,并使用层次结构信息生成一个 DTO,其中包含层次结构中的数据。
数据库中的数据大致如下
------------------------
ID | Description
----|-------------------
1 | Item 1
2 | Item 2
3 | Item 3
4 | Item 4
5 | Item 5
----------------
Parent | Child
-------|--------
1 | 2
1 | 3
3 | 4
1 | 5
Desired Output
--------------
Item 1
|-Item 2
|-Item 3
| |-Item 4
|-Item 5
因此,查询目前采用以下形式:
from a in tableA
join b in tableB on b.Parent equals a.ID
where b.Parent == root.ID
select new DTO.Entry {
Id = a.ID
...
}
包含此查询的方法将递归运行,直到没有更多子元素需要处理。
使用 Linq-to-entity 测试大约需要 320 毫秒才能完成,使用 ADO.Net 测试大约需要 8 毫秒!
这只是我必须忍受/考虑的事情,还是表现应该差不多?此外,由于底层数据结构没有参照完整性(我知道!),所以我在我的 ADO.Net 内容中对此进行了补偿,但我不能使用实体,这可能会产生影响吗?
目前看来,如果你想要性能,那么你应该坚持使用 ADO.Net