gpt4 book ai didi

.net - Entity Framework - 保持数据库上下文打开与不断重新创建

转载 作者:行者123 更新时间:2023-12-04 11:51:43 24 4
gpt4 key购买 nike

我有一个相当简单的 Winforms/Entity Framework (v6) 程序:

  • 查询数据库以填充表单元素
  • 用户点击后,重新查询数据库获取相关信息
  • 对该信息执行计算并将其显示给用户

  • 作为 EF 新手,我尝试遵循我在网上找到的示例,并提出了一些非常简单的用于填充/查询的方法:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Using ctx As New MyEntities
    <Query DB to populate initial values for first combobox>
    End Using
    End Sub

    Private Sub cboVal1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboVal1.SelectedIndexChanged
    Using ctx As New MyEntities
    <Queries to populate the other controls based upon user selections>
    End Using
    End Sub

    Private Sub Button_Press(sender As Object, e As EventArgs) Handles MyButton.Click
    Using ctx As New MyEntities
    <Queries to get data, based upon user selections for calculations>
    End Using
    End Sub

    我发现的是似乎减慢了我的程序的部分(和 如果我错了,请纠正我 - 正如我所说,我是新手)我是每次使用时都重新建立一个新的数据库连接:
    Using ctx As New MyEntities
    ...
    End Using

    在我的代码中。

    所以,我正在考虑做的是有一个表单级变量 ctx as MyEntities - 在表单加载时建立连接并在表单关闭时关闭连接并始终使用相同的连接......大致如下:

    Dim ctx as MyEntities

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ctx = New MyEntities

    <Query ctx to populate initial values for first combobox>
    End Sub

    Private Sub cboVal1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboVal1.SelectedIndexChanged
    <Queries ctx to populate the other controls based upon user selections>
    End Sub

    Private Sub Button_Press(sender As Object, e As EventArgs) Handles MyButton.Click
    <Queries ctx to get data, based upon user selections for calculations>
    End Sub

    Private Sub Main_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    ctx.Dispose()
    ctx = Nothing
    End Sub

    当我以这种方式切换工作时,它似乎大大提高了速度,我知道这让我有可能对数据库进行错误更改,但这是一个没有任何作用的小项目更新 - 只是查询......这是一个合理的解决方案还是这是一种危险的做事方式?

    最佳答案

    几乎所有现代查询工具都会将数据库连接汇集到一个连接池中。这看起来很像线程池;将打开一定数量的连接,并且每当创建新上下文并请求连接时,它将独占使用现有连接之一。当上下文被处理时,连接不会被关闭,它只会返回到连接池。

    因此,无需尝试手动使上下文长时间保持事件状态。仅将它们用于单个操作。

    当然,如果您明确不希望它发生,则可以禁用连接池,但很少有理由这样做。

    关于.net - Entity Framework - 保持数据库上下文打开与不断重新创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25550473/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com