我必须为我的大学开发系统,包括跟踪几乎所有数据(讲座,讲师,助教,学生等)。 我的数据库有30个表,而且非常复杂。 我使用EF和linq来解决连接到数据库并从中查询的问题。 但是我进入的越多,我的查询就越难以编写,更不用说维护了。 以下是一个查询的示例:http://pastebin.com/Za1cYMPa
你可以看到它几乎处于混乱状态。
那么,我是否滥用linq(linq可以解决这个问题,但是以不同的方式解决)或者linq只是不适用于像这样的更复杂的系统吗?
这是一般性问题,不是解决特定问题的问题。
答案 0 :(得分:2)
如果使用本机SQL编写,您认为查询看起来会更好还是更易于维护?在这种情况下,您可以在存储过程中隐藏查询。一旦你进入高级查询,它总是一团糟。您可以通过将子查询隐藏到数据库视图或EF查询视图中来减少一些复杂性。但是,如果您拥有高度规范化的OLTP数据库,并且需要进行复杂的报告/分析/数据挖掘查询,那么它总是很大且难以维护。这就是为什么OLAP系统存在的原因(我没有检查你的查询内容 - 只是长度所以不要把它作为构建OLAP Cube的原因)。
更重要的是查询的性能......
答案 1 :(得分:1)
通常,可以通过将重复代码抽象为可重用,易于维护的组件来降低复杂性。
在您的特定情况下,实施Repository和Specification模式可以降低复杂性,使您的代码更加一致,更易于阅读,更易于维护。
Huy Nhuyen有一篇非常有用的文章序列,解释了存储库模式,规范模式以及如何有效地将它们与实体框架相结合以获得更好的代码。这些可在以下网址获得:
答案 2 :(得分:0)
超然,这非常讨厌。
您应该考虑一下您的数据库设计。我相信有这么多表会导致您的查询过于复杂。我放置好的一组视图(或存储过程)可以简化查询逻辑。但是,这不会简化整个系统,因为在某些时候您必须连接所有这些表。