实体框架术语中的“模型”和“上下文”有什么区别

本文关键字:上下文 区别 什么 模型 框架 术语 实体 | 更新日期: 2023-09-27 18:30:15

实体框架术语中的"模型"和"上下文"有什么区别?

我在应用程序中使用实体框架数据库优先方法。这些术语已经出现了很多次,因为我一直在阅读有关 EF 实施策略的不同论坛和文章。我似乎无法弄清楚这两者有何不同(甚至不仅仅是实体框架,而是一般的软件开发)。人们使用这些词,就好像它们是不同的,但有些人似乎可以互换使用这些词。

实体框架术语中的“模型”和“上下文”有什么区别

上下文

这很容易。上下文是作为实体框架数据访问层核心的DbContext或较旧的ObjectContext类。它通过强类型实体集提供透明的数据库访问,跟踪和保存更改,管理数据库事务和连接,并包含许多实用程序方法来促进各种数据访问任务(尤其是 DbContext )。

这可以是两(或三)件事。

  • 数据模型或存储模型。这是 EF 数据访问层基础数据库的关系模型。
  • 概念模型或类模型。这是表示数据库的 .Net 类模型。此模型可以由 EF(数据库优先)生成,也可以是现有类模型(代码优先)。概念模型和存储模型通过映射链接,因此 EF 知道如何从数据库记录填充 .Net 类,反之亦然,知道如何将 .Net 类保存到数据库。
  • 有些人将概念模型中的类称为"模型"。这没有错,但我更喜欢为此使用名称实体。

因此,上下文模型是两个完全不同的东西。您可能会说上下文是两种不同类型的模型之间的中间人。

粗略地说,上下文与数据库连接或会话有关,其中模型是表、视图等与数据访问对象类(即将包含数据的对象)之间的映射

模型是一个类,通常表示数据库表或结构以显示数据库表。例如,如果我有一个汽车数据库,那么汽车模型可以是

public class Car
{
 [Key]
 public int CarId { get; set; }
 public string Make { get; set; }
 public string Model { get; set; }
 public int Year { get; set; } 
}

实体框架和 sql 提供程序(通常用于 mysql 或 mssql)使用此模型来编写针对数据库的查询。查询需要一种方法来映射它,这就是上下文的工作。上下文通常扩展DbContext,并且是用于将数据库表作为内存对象访问的外观。

public class CarContext : DbContext
{
 DbSet<Car> Cars { get; set; }
}