在 cshtml 视图中使用 Entity Framework 的缺点

Disadvantages of using Entity Framework in cshtml view

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

@{
  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>

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

这样做真的会导致设置多连接到数据库吗? (Entity Framework)

您可以直接在视图中使用 DBContext (EntityFramework) 代码,因为它是允许的并且可以完美执行。

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

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

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

首先你打破了 MVC 模式,你需要分离模型、业务日志(控制器)和呈现的视图,并且出于多种原因(在这里阅读更多内容: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 应用程序,你需要学习很多关于软件设计模式的知识。这里有一本好书'Elements of Reusable Object-Oriented Software'