asp.net - EF中的连接模型和断开模型

标签 asp.net entity-framework ado.net sqldatareader sqldataadapter

我对连接模型很困惑,并且在 Entity Framework 中断开连接。

我使用的是传统的 ADO.net(DataReader 用于连接模型,DataAdapter 用于断开连接模型)
我所知道的是,当我有很多用户需要更新或插入时,我使用连接模型,而在少数情况下,当我需要将数据发送到其他进程时,我使用断开连接的模型对内存中的数据进行一些操作并将它们发回到数据库。

现在我阅读了一些关于 EF 中连接模型和断开连接模型的文章,我很困惑为什么我应该将实体显式附加到断开连接模型中的上下文?
我还读过 web 中的默认行为是断开连接的模型,而 WPF 中的默认行为是连接模型!

  • 有人可以用现实生活的类比来简单地解释一下吗
    这两种型号有什么区别?
  • 我们如何通过简单的例子在 EF 中处理这两种模型?
  • 应用程序类型(网络表单
    、MVC、WPF、WCF) 和 EF 中使用的专用模型?
  • 何时使用连接模型,何时使用断开模型(使用 EF)?
  • 最佳答案

    背景

    The ADO.NET Framework支持两种数据访问架构模型:

  • 面向连接
  • 断开连接

  • 在面向连接的数据访问架构中 应用程序与数据源建立连接,然后使用相同的连接通过 SQL 请求与其交互(例如,即使不使用任何数据库操作,也必须在您的应用程序和数据源之间保持开放连接)。

    连接架构是指您不断访问数据库以执行您希望执行的任何 CRUD(创建、读取、更新和删除)操作。这会为数据库创建更多流量,但通常会更快,因为您应该执行较小的事务。

    它基于类 Connection , Command , DataReaderTransaction .

    enter image description here

    在断开连接的数据访问架构中 ADO.net 使用可以同时保存多个表的内存数据存储(它们之前被提取过)。

    断开连接的架构是一种从数据库中检索记录集并将其存储的方法,使您能够对内存中的数据执行许多 CRUD(创建、读取、更新和删除)操作,然后它可以与数据库重新同步重新连接时。

    它建立在类上 Connection , DataAdapter , CommandBuilder , DataSetDataView .

    enter image description here

    连接和断开连接架构的一些关键类别
  • DataReader是连接架构,因为它保持
    连接打开,直到所有行都被一一获取。
  • DataSet是断开的架构,因为所有的记录都是
    立即带来,无需保持连接。
  • DataAdapter充当连接和连接之间的桥梁
    断开连接的对象。它管理数据源和Dataset通过将数据源中的数据填充到 Dataset .

  • 在理想的情况下哪个更好?

    连接模式
  • 面向连接
  • 我们使用 DataReader 从数据库中读取数据对象
  • 其方法提供更快的性能
  • 可以容纳单表的数据
  • 它是只读的,我们无法更新数据

  • 断开模式
  • 它是面向断开连接的。
  • 我们使用 DataSet 从数据库中读取数据目的。
  • 它的速度和性能都很低。
  • 它可以容纳多个数据表。
  • 我们可以执行所有选项,如更新、插入、删除等。


  • 回答您的问题

    Now I read some articles about connected model and disconnected model in EF and I'm confused why should I attach explicitly the entities to the context in disconnected model? I had read also that the default behavior in web is disconnected model and in WPF is connected model !



    Web 应用程序可以连接或断开连接,以及,实际上 ASP.NET 应用程序断开连接 , 由于 ADO.NET 断开模型。由于简单的实现和更容易的故障排除,断开连接的模型变得越来越流行。 ASP.NET 应用程序的良好设计会在数据操作完成后立即关闭所有数据库连接,无论是每月 15 次点击还是每秒 15 次点击。

    Could someone explain in easy manner with an an analogy of real life what's the difference between the two models?



    是的,假设您有一些重要的提示可以告诉/了解 friend 。 断开连接 意味着你一直在等待见到他的方式,或者你正在花时间获得更多要说的提示。 已连接 是您与他住在一起或与他进行在线/实时通信以在每次需要时告知每个提示时的方式。

    How we could handle both models in EF with simple example?



    EF 使用 断开连接 模型。因为您处理数据并进行所需的更改,然后您执行 SaveChanges :)

    Is there a relationship between the type of app (web form , MVC, WPF, WCF) and the dedicated model used in the EF?



    它基于应用程序逻辑。 RealTime 应用程序需要连接,因为它们需要按时传播和更新,而不是其他应用程序类型。

    When to use connected model and when to use disconnected model (using EF) ?



    我已经回答了这个。只是我想说的是,ADO.NET 仅在最短的时间内保持连接打开,从而节省了系统资源并为数据库提供了最大的安全性,同时对系统性能的影响也较小。它基于您的应用程序策略/类型,您可以自己做出正确的决定。

    更新 :

    but if i was in a disconnected model, Could you tell me how the EF can handle multiple operations (INSERTs,UPDATEs,DELETEs) from many users at the same time?



    看看 ObjectStateManager 它负责上下文中与对象跟踪相关的一切。如果某些用户对同一条目执行并发更新,默认情况下, Entity Framework 实现了乐观并发模型。这意味着在查询数据和更新数据之间不会对数据源中的数据持有锁。 Entity Framework 将对象更改保存到数据库中,而无需检查并发性。 对于可能会遇到高度并发的实体(如银行系统),我们建议该实体在概念层定义一个属性为 ConcurrencyMode="fixed" 的属性。 ,如下例所示:
    <Property Name="Status" Type="Byte" Nullable="false" ConcurrencyMode="Fixed" />
    

    使用此属性时, Entity Framework 会在将更改保存到数据库之前检查数据库中的更改。任何冲突的更改都将导致 OptimisticConcurrencyException 当您定义使用存储过程更新数据源的实体数据模型时,也会发生这种情况。在这种情况下,当用于执行更新的存储过程报告更新了零行时,将引发异常。更多信息请访问 Saving Changes and Managing Concurrency

    关于asp.net - EF中的连接模型和断开模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31763745/

    相关文章:

    c# - 在 asp.net 中插入日期时出错

    c# - 使用 ado.net 执行时,逗号分隔的字符串值不适用于 sql 查询的 In 子句

    如果 ModelState 无效,ASP.NET MVC AJAX 更改 UpdateTargetId

    c# - Entity Framework : What is use/Meaning of (? ) 问号

    c# - Entity Framework 在两个不同的上下文中插入实体两次

    c# - sql更新查询不更新数据库

    .net - 确定是否在没有System.Web的ASP.NET或WinForms/控制台中运行

    asp.net - GridView - 导出到 Excel 时删除编辑和删除列

    css - 在 ASP.NET 中动态编辑 CSS 代码

    c# - WPF MVVM 中的 ADO.NET Entity Framework ?