c# - MVC Entity Framework - 处理 DbContext 的实例?

标签 c# asp.net-mvc-4 entity-framework-4 code-first

这里还有其他类似的帖子,我已经看过了,但还是不太清楚。我希望没有人介意重新唤醒一个主题,而不是死掉旧的东西并希望得到回应。

问题是何时释放 DbContext。 这是我的 MVC 应用程序上的 Controller 示例

        public ActionResult Index()
        {
          using (var db = new TheCurve.Models.TheCurveDb())
           {
              var result = db.GetTopArticles().ToList();
              return View(result);
           }

        }

在此示例中,Razor View 抛出异常,因为 DbContext 已因 Using block 而被释放。

如果我不处理 DbContext,当 Razor View 尝试访问模型的属性(例如这段代码)时,它会抛出错误“已经有一个与此命令关联的打开的数据读取器”。

var type = Model.ArticleType.Type;
    switch (type)
    {
        case "Example":
            defaultTitleImage = "Content/themes/base/images/example.png";
            break;

        case "Download":
            defaultTitleImage = "Content/themes/base/images/download.png";
            break;

        case "Link":
            defaultTitleImage = "Content/themes/base/images/link.png";
            break;

        case "Article":
            defaultTitleImage = "Content/themes/base/images/article.png";
            break;

    }

我知道 DbContext 在检索数据后关闭连接,但这是否意味着它不需要处理?

非常感谢

-编辑

显示文章概述的部分 View 。

    @model TheCurve.Models.Article


@{
    //Shorten description for Article overview
    var strDescription = Model.Description.Length > 250 ? Model.Description.Substring(0, 250) + "..." : Model.Description + "...";

    //Decide which image to show on overview.
    string defaultTitleImage = null;
    if (Model.TitleImage == null)
    {
        var type = Model.ArticleType.Type;
        switch (type)
        {
            case "Example":
                defaultTitleImage = "Content/themes/base/images/example.png";
                break;

            case "Download":
                defaultTitleImage = "Content/themes/base/images/download.png";
                break;

            case "Link":
                defaultTitleImage = "Content/themes/base/images/link.png";
                break;

            case "Article":
                defaultTitleImage = "Content/themes/base/images/article.png";
                break;

        }

    }
    else
    {
        defaultTitleImage = Model.TitleImage;
    }

}


<article class="clear-fix">

<div class="float-left">
    <img src="@defaultTitleImage" alt="The Curve - Article Type"/>
</div>
<div class="float-left articleoverview">
    @Html.ActionLink(Model.Title.TrimStart(), "Details","Code", new {articleId = Model.Id}, null)
    <p>@strDescription</p>
    <p><i>By @Model.Author On @Model.DateCreated.ToString("dd/MM/yyyy")</i></p>

</div>
</article>

这是使用上述部分的 Razor View 。

@model IEnumerable<TheCurve.Models.Article>
@{
    ViewBag.Title = "Code Samples & Technology Blog";
}
    <section>
        <h3>Currently Viewing Most Recent Entries</h3>
        @foreach (var item in Model)
        {
            @Html.Partial("_ArticleOverview", item)
        }
    </section>

最佳答案

如果您要使用此连接到 SQL 服务器(我想是这样),请在您的连接字符串中添加 MultipleActiveResultsets=true。这允许多个打开的数据读取器连接到 SQL 服务器。

参见 this了解更多。

关于c# - MVC Entity Framework - 处理 DbContext 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495994/

相关文章:

c# - 使用 Entity Framework 和 linq 从查询子集中获取最大日期时间(数据库列)?

c# - Win32 笔模拟不适用于 InjectTouchInput()

c# - Autofac 属性注入(inject)在属性上失败

asp.net - 优化了从网站请求时返回 404 的 bundle

asp.net - 使用HttpRequestMessage.Properties承载每个请求的上下文

entity-framework-4 - 在 Entity Framework 4.0 中,我们如何在一次调用中从数据库中获取多个记录集并将所有数据传递给 View

c# - Entity Framework 检索不同的实例

c# - 如何将 List<T> 转换为 BsonArray 以保存 MongoDB 文档

c# - Entity Framework Core 尝试在调用 SaveChanges() 时插入重复记录

c# - 使用 Graphics.DrawImage() 绘制带透明度/Alpha channel 的图像