C# “a”和“a”之间有什么区别;模型";及;上下文“;实体框架中的术语?

C# “a”和“a”之间有什么区别;模型";及;上下文“;实体框架中的术语?,c#,entity-framework,C#,Entity Framework,实体框架行话中的“模型”和“上下文”有什么区别 我在应用程序中使用实体框架数据库优先方法。当我阅读不同论坛和关于EF实施策略的文章时,这些术语已经出现了很多次。我似乎无法理解这两个方面有什么不同(即使是实体框架,但总体上是软件开发)。人们使用这些词的时候好像它们是不同的,但是有些人似乎可以互换使用这些词 松散地说,上下文与数据库连接或会话相关,其中模型是表、视图等与数据访问对象类(即将包含数据的对象)之间的映射。模型是一个类,通常表示用于显示数据库表的数据库表或结构。例如,如果我有一个汽车数据库

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


我在应用程序中使用实体框架数据库优先方法。当我阅读不同论坛和关于EF实施策略的文章时,这些术语已经出现了很多次。我似乎无法理解这两个方面有什么不同(即使是实体框架,但总体上是软件开发)。人们使用这些词的时候好像它们是不同的,但是有些人似乎可以互换使用这些词

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

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

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; }
}
公共类CarContext:DbContext
{
DbSet Cars{get;set;}
}

上下文

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

型号

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

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

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

DbContext类是允许在EF中使用数据库查询的基类。MVC意义上的模型可以指包含实体(也称为模型)和数据库连接的通用域,也可以指模型,其中它们基本上指用于表示数据的类(例如
Person
),为什么任何人都会拥有比模型更多的DBContext,反之亦然?当涉及到模型数量(edmx)和使用的上下文数量时,是否有最佳实践?@user1431072有理由使用单独的上下文,每个上下文代表数据库的不同部分。例如,如果有单独的授权表,则可以有授权上下文(附带授权类模型)和业务上下文。不可能有比上下文更多的(存储)模型:上下文访问一个数据库。