16

实体框架行话中的“模型”和“上下文”有什么区别?

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

4

3 回答 3

13

语境

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

模型

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

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

所以上下文模型是两个完全不同的东西。你可能会说上下文是两种不同类型模型之间的中间人。

于 2013-09-05T20:15:59.203 回答
3

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

于 2013-09-05T17:17:32.420 回答
3

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

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; }
}
于 2013-09-05T17:17:41.103 回答