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

时间:2013-09-05 17:13:06

标签: c# entity-framework

"模型"有什么区别?和"背景"在实体框架术语?

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

3 个答案:

答案 0 :(得分:10)

<强>上下文

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

<强>模型

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

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

所以 context model 是两回事。您可能会说上下文是两种不同类型模型之间的中间人。

答案 1 :(得分:3)

松散地说,上下文涉及数据库连接或会话,其中模型是表,视图等与数据访问对象类(即包含数据的对象)之间的映射

答案 2 :(得分:2)

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

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; }
}