【问题标题】:What is the difference between a "Model" and a "Context" in Entity Framework jargon?实体框架行话中的“模型”和“上下文”有什么区别?
【发布时间】:2013-09-05 17:13:05
【问题描述】:

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

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

【问题讨论】:

  • DbContext 类是允许在 EF 中使用的数据库查询的基类。 MVC 意义上的模型可以指包括实体(也称为模型)和数据库连接的一般域,或者可能指模型,其中它们基本上表示用于表示您的数据的类(例如Person )。

标签: c# entity-framework


【解决方案1】:

上下文

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

型号

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

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

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

【讨论】:

  • 考虑到您的回答中的第 2 点,为什么会有人拥有比模型更多的 dbContexts,反之亦然?在模型(edmx)的数量与使用的上下文数量方面是否有最佳实践?
  • @user1431072 有不同的上下文可能是有原因的,每个上下文代表数据库的不同部分。例如,如果有单独的授权表,您可以有一个授权上下文(带有随附的授权类模型)和一个业务上下文。不可能有比上下文更多(存储)的模型:一个上下文访问一个数据库。
【解决方案2】:

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

【讨论】:

    【解决方案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; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多