EF 基础(第八章: 持久化方案)

Entity Framework 中的持久化

使用 Entity Framework 持久化(保存)一个实体到数据库有两种方案:连接方案(Connected Scenario)和断开方案(Disconnected Scenario)。

连接方案:

在连接方案中,上下文类(继承自 DbContext)的同一个实例用来对数据库查询和保存实体。它在声明周期中保持对所有实体的跟踪。当数据库在本地或者同一个网络上时,在窗体应用程序中,这种方法很管用。
EF 基础(第八章: 持久化方案)
优点:

  • 执行快
  • 上下文保持对所有实体的跟踪,并且当实体发生改变时,上下文自动设置它的状态。

缺点:

  • 上下文保持活动状态,所有数据库连接保持打开。
  • 使用更多资源

断开方案:

在断开方案中,对数据库查询和保存实体使用不同的上下文实例。一个上下文实例检索数据后会被处理掉,并且一个新的实例被创建用来保存实体到数据库。
EF 基础(第八章: 持久化方案)
断开方案复杂是因为一个上下文的实例不跟踪实体,所以你必须在调用SaveChanges()前给每个实体设置合适的状态。在上面的图表中,程序使用 Context 1 检索实体图表,并且使用 Context 2 执行一些 CUD (Create, Update, Delete)操作。在这种方案中 Context 2 不知道对实体图表作了哪些操作。

这在网络程序或者带远程数据库的程序中很管用。

优点:

  • 相比连接方案使用更少的资源
  • 没有打开的数据库连接

缺点:

  • 保存之前要为每一个实体设置合适的状态
  • 比连接方案执行慢