EF 上的数据库连接错误

2023-11-29

我对实体框架非常陌生,我在编写基于 Web api 的网站(连接到 mssql)时遇到问题。我不断收到看似随机的错误(大部分似乎与数据库相关)。这些错误最常在网站首次发布时发生,但有时也会在距上次发布数小时后发生。错误的选择:

  • 无效操作。连接已关闭。
  • 已经有一个打开的 DataReader 与此命令关联,必须先将其关闭。
  • 连接未关闭。连接的当前状态为正在连接。
  • 创建模型时无法查看上下文
  • 底层提供商打开失败

我的上下文如下所示:

public class Context : DbContext
{

    public Context() : base("name=DefaultConnection")
    {
    }

    public override int SaveChanges()
    {
        DateTime now = DateTime.Now;
        foreach (ObjectStateEntry entry in (this as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified))
        {
            if (!entry.IsRelationship)
            {
                IHasUpdated updated = entry.Entity as IHasUpdated;
                if (updated != null)
                    updated.updated = now;
            }
        }
        return base.SaveChanges();
    }

    public DbSet<Branch> Branches { get; set; }
    public DbSet<Company> Companies { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<UsefulLink> UsefulLinks { get; set; }
}

还有比这更多的 DbSet。我应该为每个创建一个单独的上下文吗?

我的基本控制器之一:

 public class UsefulLinksController : ApiController
 {
    private Context db = new Context();

    [ResponseType(typeof(UsefulLinksWrapper))]
    public IHttpActionResult GetUsefulLinks([FromUri]UsefulLinkParams prams)
    {   
        UsefulLinksWrapper wrapper = new UsefulLinksWrapper();
        Meta meta = new Meta();
        IQueryable<UsefulLink> query = db.UsefulLinks;

    if (prams.sortBy == null)
        {
            prams.sortBy = "ID";
        }

        // Paging
        query = query.OrderBy(prams.sortBy + " " + prams.sortDirection).Skip(prams.offset - 1).Take(prams.limit);

        List<UsefulLink> data = query.ToList();

        meta.totalCount = query.Count();
        meta.offset = 1;
        meta.limit = prams.limit;
        wrapper.meta = meta;
        wrapper.data = data;

        return Ok(wrapper);

    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }

    private bool UsefulLinkExists(int id)
    {
        return db.UsefulLinks.Count(e => e.ID == id) > 0;
    }
}

当我在本地运行该网站时,我似乎没有看到这些错误,尽管在发布该网站时我们有两个人点击了它,所以问题可能源于多个用户?


克里斯,我注意到在您的控制器中,您正在与控制器类中的所有方法共享数据库上下文。

这通常不是实体框架中的最佳实践(请参阅:EntityFramework 4 ObjectContext 生命周期)。您应该尽可能简短地保持上下文的活力。让上下文保持活动状态以在多个方法之间共享可能会导致上面列出的许多错误。

我建议尝试实例化上下文的新实例,而不是在任何使用它的地方并快速处理它。

这通常会导致更稳定的行为。

所以如下:

class SomeClass
{
   private context = new Context(); //sharing your context with all methods
   public someMethod()
   {
      context.doSomething;
   }

   public someMethod2()
   {
      context.doSomething;
   }
}

应该变成:

class SomeClass
{

   public someMethod()
   {
      Context context = new Context(); //now your context is declared and disposed of within each method
      context.doSomething;
   }

   public someMethod2()
   {
      Context context = new Context(); //now your context is declared and disposed of within each method
      context.doSomething;
   }
}

或者更好的是,您可以使用 using 构造来确保正确处理您的上下文:

class SomeClass
{
   public someMethod3()
   {
      using(Context context = new Context()) //now wrapping the context in a using to ensure it is disposed
      {
         context.doSomething;
      }
   }
}

我建议尝试上述改变,看看你的行为是否变得更加稳定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF 上的数据库连接错误 的相关文章

  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 从代码中,如何创建对存储在附加属性中的对象的属性的绑定?

    我们有一个继承的附加属性来存储一个对象 在可视化树的更下方 我们希望从代码绑定到该对象的属性 通常我们像这样构建绑定的路径部分 var someBinding new Binding Path new PropertyPath Attach
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • 为什么WebApi绑定System.Version参数失败?

    UPDATE 解决了 这里没什么可看的 请继续 我有一个ApiController方法需要一个System Version范围 该参数以 JSON 形式在请求正文中传递 这是发送的内容 专业 0 未成年人 7 构建 0 修订 0 主要修订
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T

随机推荐

  • 通过 C# 应用程序测试网站是否处于活动状态

    我正在寻找通过 C 应用程序测试网站是否活跃的最佳方法 背景 我的应用程序包括Winform用户界面 一个后端WCF服务 and a website将内容发布给 UI 和其他使用者 为了防止由于缺少 WCF 服务或网站关闭而导致 UI 启动
  • 如何(简单地)从java生成POST http请求来进行文件上传

    我想使用 POST http 事件从 java 应用程序 小程序上传文件 我想避免使用 SE 中未包含的任何库 除非没有其他 可行 选项 到目前为止 我只提出了非常简单的解决方案 创建字符串 缓冲区 并用兼容的标头填充它 http www
  • Jqplot 的 IE8 打印问题

    我正在使用 IE8 测试 jqplot 当我尝试打印时 轴标签发生偏移 我使用 Andrew Bullock 的 Canvashack 作为解决方法 http blog muonlab com 2010 06 02 getting posi
  • Apache Beam:固定窗口触发器

    根据下列的文档中指出 如果您没有明确指定触发器 您会得到如下所述的行为 如果未指定 默认行为是在以下情况下首先触发 水印经过窗口末尾 然后每隔一段时间再次触发 时间有迟到的数据 对于固定窗口来说 这种行为也成立吗 例如 您假设固定窗口应该有
  • Flutter web:打开直接 URL 导航在本地工作但在部署后不起作用

    I am trying to implement Flutter web url navigation in my application When I am trying to open http localhost 7357 priva
  • 将效果应用于 iPhone 相机预览“视频”

    我的目标是编写一个自定义相机视图控制器 可以使用后置摄像头和前置摄像头 如果有 以所有四个界面方向拍照 正确旋转和缩放预览 视频 以及全分辨率照片 允许将 简单 效果应用于预览 视频 和全分辨率照片 实现 在 iOS 4 2 Xcode 3
  • 生成器可以递归吗?

    我天真地尝试创建一个递归生成器 没用 这就是我所做的 def recursive generator lis yield lis 0 recursive generator lis 1 for k in recursive generato
  • top_n 函数返回的行数超出预期

    我对 r 很陌生 而且很累 我想我的大脑当前无法正常工作 但对我来说 下面的代码应该只返回 10 行 它返回 66 这是为什么 library dplyr a lt structure list calls in range c 17 14
  • Nginx - 使用/子文件夹重定向反向代理 Ghost 博客

    我有一个正在运行的 nginx 实例 其规则如下 但我很难将所有请求指向domain com ghost 我尝试修改location 阻止到location ghost 但没有成功 我刚刚从 Ghost 应用程序中收到 404 错误 有什么
  • IOS:无需 iphone/ipad 邮件应用程序即可发送邮件

    我想创建一个有 5 个文本字段和一个 textView 的应用程序 1 Name 2 Surname 3 Telephone 4 your email user email not address email receiver 5 city
  • jQuery 获取带有 id 的单击单元格的表头名称

    我有一个表 在该表中我有值id edit 现在 我想要的是当我单击任何单元格时获取相应列的标题名称 到目前为止 根据之前提出的问题 我得到的是 body on click td edit function var th this close
  • Javascript 正则表达式只允许正数

    我用它来测试数字 d 但我需要确保它大于零 同时仍然允许 0000123123123 例如 你可以写 d 1 9 d 零个或多个数字 后跟一个非零数字 再后跟零个或多个数字
  • 按比例调整图像大小

    我想将上传的图像调整为宽度 180px 高度成比例 有没有任何课程可以做到这一点 感谢帮助 我认为这个问题可以用实际的代码示例来回答 下面的代码向您展示了如何调整目录中图像的大小uploaded 并将调整大小的图像保存在文件夹中resize
  • iphone 平铺图像

    我有一个 1280 x 1664 的图像 我想使用 Apple 提供的 ScrollViewSuite 示例 但我需要将此图像剪切到多个缩放级别 那么 有人知道如何在多个缩放级别上平铺图像吗 一定有一种简单的方法可以将图像填充到 256x2
  • 处理交易时虚拟机异常:气体耗尽

    我正在使用 testrpc web3 1 0 和 Solidity 构建一个简单的 Dapp 但我总是收到此错误 并且找不到问题所在 请帮忙 我的 JavaScript 文件 const Web3 require web3 const fs
  • 如何在 Kotlin Desktop Compose 中触发 PC 键盘输入

    我将使用 Kotlin Jetpack Compose 开发一个 POS 系统 我想知道如何在我的项目中触发键盘输入事件 在 Compose Desktop 中 您可以使用以下方式侦听关键事件onKeyEvent Window范围 Wind
  • Discord Bot + Google Cloud Run:“容器无法启动。”

    我正在尝试部署一个用 python 编写并通过 Docker 容器化到 Google Cloud Run 的简单 Discord 机器人 Dockerfile 非常简单 FROM python 3 9 WORKDIR app COPY re
  • 有没有简单的 3 列、纯 CSS 布局?

    不需要以下内容的一种 对图像的依赖 即 假柱 专门为 IE 添加的某种怪异或 hack 要求 IE 以怪异模式运行 没有像三个 DIV 之一与其他 DIV 重叠那样的奇怪现象 即 圣杯 边距设置为高负数 使它们远离视图屏幕 再次 圣杯 布局
  • ember.js #每个按属性排序

    我有一个数组Ember Object由 Handlebars 显示的 s each 我希望每次数组更改时都按这些对象的属性进行排序 所以像这样 var arr Ember Objects create position 0 label fo
  • EF 上的数据库连接错误

    我对实体框架非常陌生 我在编写基于 Web api 的网站 连接到 mssql 时遇到问题 我不断收到看似随机的错误 大部分似乎与数据库相关 这些错误最常在网站首次发布时发生 但有时也会在距上次发布数小时后发生 错误的选择 无效操作 连接已