【问题标题】:Disadvantages of using Entity Framework in cshtml view [closed]在 cshtml 视图中使用实体框架的缺点 [关闭]
【发布时间】:2016-11-13 11:53:37
【问题描述】:

有时我会将一些 C# 代码放在我的视图 (.cshtml) 中,而不是我的所有代码。例如,我有一个名为 LawCategory 的表,我这样做:

@{
  var db = new Contracts.Models.DataContext();
  var LawCat = db.LawCategory.ToList();    
}

然后像这样使用它:

 <div class="col-md-6">
            <label>category:</label>
            <select name="Type" id="Type" class="form-control">
                <option value="0">All</option>
                @foreach (var i in LawCat)
                {
                    <option value="@i.ID" @(Request.QueryString["id"] == i.ID.ToString() ? "selected" : "")>@i.Name</option>
                }
            </select>
        </div>

我想知道在视图中使用 datacontext 并连接到数据库而不是从控制器发送视图模型有什么缺点?

这样做真的会导致设置多连接到数据库吗? (实体框架)

【问题讨论】:

  • 它的设计很糟糕。假设您可以仅使用具有 1000 行代码的单一方法编写整个应用程序,但您不应该这样做,因为它的设计很糟糕。视图应该只关注表示逻辑,与数据存储的交互应该在控制器中或调用堆栈的更下方完成。
  • 基于意见。不适合 Stack Overflow。

标签: c# asp.net-mvc entity-framework datacontext


【解决方案1】:

您可以直接在 View 中使用 DBContext (EntityFramework) 代码,因为它被允许并完美执行。

现在问题在于设计和 MVC 模式本身。

  1. 在 MVC 模式中,我们主要用于关注点分离。除了管理视图之外,这里的视图还有不止一个问题。它直接调用 EntityFramework,因此打破了这一点。

  2. 它使代码的可测试性降低。在这里,我们还想查看每个视图,因为视图可能包含一些代码,而控制器中没有指定这些代码,因此仅通过查看控制器我们无法识别依赖关系。

【讨论】:

  • 那么多连接数据库就不用担心了吗?
  • 这取决于。让我们假设您想使用 EF 获取多个表记录,并在 View 中调用实体框架并使用相同的框架来获取多个数据,然后不会出现问题,但会出现设计和模式问题。
  • 所以假设我在操作中也使用了 EF 连接,在这种情况下有问题吗?我的操作中的一个连接返回我的视图和我的视图中的另一个连接
  • 我说这取决于开发人员和 SQL 服务器是否允许两个连接。与数据库的连接没有问题。如果你想在一个连接中,你可以将代码移动到控制器的动作,但这取决于开发人员,但设计和模式的观点认为这段代码不好,不是因为它已经连接到数据库,而是视图有 UI 或演示之外的逻辑。
  • 谢谢,最后一个问题。据说,如果我在action和view中使用EF,会不会降低性能?
【解决方案2】:

首先你要打破 MVC 模式,你需要将模型、业务 logci(控制器)和渲染视图分开,这有很多原因(阅读更多:https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

其次,如果您正在构建一个 Web 应用程序,您需要考虑到要遵循的规则(如果您想以正确的方式进行操作)。在这里,您需要构建和管理您的业务层(主要是您的数据模型),然后您可以选择在您的表示层(适用于您的案例的 MVC)中使用的任何模式。在此处了解有关 3 层架构的更多信息:http://www.c-sharpcorner.com/uploadfile/4d9083/create-and-implement-3-tier-architecture-in-asp-net/

第三,使用 C# 和 .NET 很酷而且对学习很有帮助,但是如果你想构建专业的 Web 应用程序,你需要学习很多关于软件设计模式的知识。这是一本好书《可重用的面向对象软件的要素》

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2011-01-14
    • 2015-10-23
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    相关资源
    最近更新 更多