【问题标题】:Creating WebForms App in MVC 3 + Entity Framework在 MVC 3 + Entity Framework 中创建 WebForms 应用程序
【发布时间】:2011-05-20 23:19:11
【问题描述】:

我有一个用 ASP.NET 2.0 WebForms 开发的小应用程序。出于学习目的,我正在考虑将此应用程序转换为 MVC 3 + Entity Framework。下面是模拟我的应用程序的最简单示例。没什么特别的。

应用布局:

(图像应该读取“输入字段”而不是“文件”)

架构:

要点:

  1. Service层的方法是使用ADO.NET SqlCommandExecuteReader方法执行存储过程

  2. 大部分操作等逻辑都是在存储过程中完成的。在服务层几乎没有任何数据操作

现在我想将此应用程序转换为 MVC。

问题:

  1. 如果我将此应用程序转换为 MVC + 实体框架,我会(技术上)获得什么好处?

  2. 我该怎么做?

  3. 我看过一些基本的 MVC3 教程,但它们都在谈论 EF 代码优先,我认为这不适合我的情况,因为我想使用现有的存储过程。对吗?

注意:我想使用现有的存储过程。假设我无法控制数据库结构的更改。

更新 1:

  1. 我的应用程序中没有一个内联查询。即使是最小的查询也是一个存储过程。很多。

  2. 使用 SQL Server,几乎没有机会更改为任何其他 DBS。

更新 2:

我的网络表单应用程序已完成 99%,可以随时上线,但由于一些业务障碍,它还没有上线。同时,我想如果我可以将它转换(即开发)到 MVC,我会学习加上如果它可以上线(我的第一个 MVC)而不是网络表单。

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework


    【解决方案1】:

    在回答具体问题之前,我会指出您应该将选项分成 2 个:

    1. 将表示层转换为使用 MVC 而不是 WebForms。
    2. 将数据层转换为使用 EF 而不是 ADO.NET。

    现在回答你的问题

    1. MVC 的好处包括更好地控制 HTML、更好的可测试性等。EF 的好处包括抽象出特定于 DB 的东西(理论上你可以用 MySQL 替换 SQL Server,假设有适当的 MySQL 提供程序)、LINQ 支持等。当然,这种过渡也有成本。
    2. 分而治之。如前所述,您不必一次完成所有操作。从表示层开始,将其转换为 MVC。请记住,您可以混合使用 WebForms 和 MVC 应用程序,因此您不必同时转换所有页面。然后将您的数据层转换为 EF。或者以相反的顺序开始,只要对您的项目有意义。
    3. [不是该主题的专家] 如果您严重依赖 SP 而不是考虑传统 EF。如果您只有几个 SP,那么您可以考虑先编写代码 + 使用 DataSet(可能包装在自定义构建的类中)处理 SP,以使一切正常,尽管这可能会变得复杂。和以前一样,如果成本太高,您不必转到 EF。

    【讨论】:

    • 谢谢。我更新了我的帖子以包含更多信息。所以我的理解是从编码的角度或性能的角度来看,我的应用程序不会有太大的不同。我感兴趣的是更清晰的标记和使用 Razor 语法。此外,我使用 updatePanels 并正在考虑摆脱代码隐藏的事情并开始使用 jquery+ajax,而那时 RazorViews 似乎很有希望。
    【解决方案2】:

    你能得到什么好处?这是完全错误的问题。你应该问我当前的解决方案有什么问题,如何通过用 EF 替换数据访问或用 ASP.NET MVC 替换表示层来解决这些问题?

    据我了解,您这样做只是为了学习 - 它没有商业驱动力。在这种情况下,有一些要点会给您一些想法:

    • 如果您不想用常见的 EF 方式替换现有的 SP 逻辑,您将几乎得不到任何好处,也不会学习 EF。 EF 允许使用存储过程来检索映射实体或加载自定义类。映射实体通常代表数据库中的视图或表 - 如果您甚至想要定义任何映射实体,这里都不清楚。加载自定义类时获得的唯一好处是自动填充结果集中的属性。这意味着您将需要每个 SP 结果的类,该类将具有与结果集中的列完全相同的属性。 EF 中的 SP 不支持多个结果集(默认情况下),也不支持自动加载关系。
    • 当从 ASP.NET Web 窗体迁移到 ASP.NET MVC + Razor 时,您几乎可以肯定您的前端代码不会在新解决方案中使用。您只需创建新项目并从头开始做前端。
    • 如 @marcind 所述,这两项更改是完全独立的 - 您可以只做一项而不做其他。

    【讨论】:

    • 您在将实体映射到 SP 方面提出了一个很好的观点。我认为我必须使用 EF 遵循 Schema First 方法,因为我已经拥有现有的数据库。使用这种方法,我可能不必显式创建我的 Person(Entity) 类,但我可以依靠 VS 来做到这一点。我需要对多个结果集进行更多检查(我的 SP 很少这样做)。使用 Razor,我主要关心的是我有相互交互的用户控件。我知道 Razor,我可以拥有 partialView,但我不知道它们将如何相互交互。谢谢指点。
    • 我建议单独询问有关替换 UserControls 的问题。
    • 如果您想检查返回多个结果集的可能性,请检查 EFExtensions archive.msdn.microsoft.com/EFExtensions
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多