我认为这是一个开放式问题,所以这是我的 2c。(如果 tl dr,请转到最后一部分)
对我来说,与其说是“通过 EF/Linq”,不如说是需要选择合适的数据持久化库。我在 MVC 中使用过 PetaPoco、Ado.Net、NHibernate/ActiveRecord、Linq2Sql、EF(我的主要选择)。
最佳实践实际上来自于意识到控制器仍然是表示层的一部分,并且它不应该处理除了 HttpContext 相关操作 + 调用业务逻辑服务类之外的任何事情。
我将我的类安排为:
Presentation (MVC) -> Logic Services (Simple classes) -> Data Access (Context Wrapped in "repositories")。
所以我无法想象是否使用 EF 会对 asp.net MVC 产生任何影响。
对我来说,数据访问在 DTO 中返回数据,例如
公共列表 GetAllFoos()
该方法字符串是从 xml 等连接还是执行简单的 Context.Foos.ToList() 与应用程序的其余部分无关。我只关心数据访问不会返回一个与列匹配的数据集。那些留在DAL。
请参阅第 1 点和第 2 点。我的存储库上有 CRUD 方法。它是如何完成的与应用程序的其余部分无关。采用我的存储库类的最基本接口之一:
公共接口 IFooRepository { void Save(Foo foo) Foo Get(int id) void Create(Foo foo) void Delete(int id) }
还没有提到的一点,DI也很关键。具体实现“FooRepository”可以选择请求依赖项,例如 Web 服务、上下文类等。然而,这些与依赖于接口的调用者完全无关。
如果您在上述 3 点之后仍然需要示例,请发表评论,我将使用 Ado.net 制作一些非常简单的东西。
==================================================== =========================
去EF还是不去EF。
对我来说,如果用新模式开始一个新项目,我会先使用 EF 代码。
将新代码安装到旧数据库 + 旧项目没有我可以重用的 ORM 映射 = PetaPoco。
==================================================== =========================
在您的项目中:
“SQL 报表开发人员的 SQL 插件报表工具”。“的”sql报告服务?我不确定你为什么需要做任何事情?SSRS 不是已经这样做了吗?(输入sql语句/数据源,生成参数表格等)。
如果不是,我会质疑设计决定。IMVHO,应用程序用户(我不在乎它是“报告开发人员”还是 w/e)输入 SQL 语句的需求通常源于“建筑宇航员”。当您通过 GUI 作为字符串输入时,如何调试 SQL 语句?你怎么知道表和关系?您要么深入研究 SSMS 并返回 gui,要么构建复杂的 UI(又名重建 SSMS)。
归根结底,如果你想为无数不同的用户提供无数的报告,你必须为此付费。我看到太多“架构宇航员”公开应用程序以接受 SQL 语句,只是为了让每个人都浪费时间猜测应该放入什么。根本没有节省成本。
好吧,如果你必须这样做,嗯……祝你好运。最好的办法是作为 DataTable 返回并将行/列/数据转储到视图中,其中嵌套的 foreach 循环遍历行然后列。