在cshtml视图中使用实体框架的缺点

本文关键字:实体 框架 缺点 cshtml 视图 | 更新日期: 2023-09-27 18:17:45

有时我把我的一些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>

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

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

在cshtml视图中使用实体框架的缺点

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

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

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

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

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

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

第三,使用c#和。net很酷,很有帮助,但如果你想构建专业的web应用程序,你需要学习很多软件设计模式。这里有一本好书《可重用的面向对象软件的要素》