实体框架行话中的“模型”和“上下文”有什么区别?
我在应用程序中使用实体框架数据库优先方法。这些术语已经出现了很多次,因为我一直在阅读有关 EF 实施策略的不同论坛和文章。我似乎无法弄清楚这两者有什么不同(即使只是实体框架,也不是一般的软件开发)。人们使用这些词好像它们是不同的,但是有些人似乎可以互换使用这些词。
实体框架行话中的“模型”和“上下文”有什么区别?
我在应用程序中使用实体框架数据库优先方法。这些术语已经出现了很多次,因为我一直在阅读有关 EF 实施策略的不同论坛和文章。我似乎无法弄清楚这两者有什么不同(即使只是实体框架,也不是一般的软件开发)。人们使用这些词好像它们是不同的,但是有些人似乎可以互换使用这些词。
语境
这很简单。上下文是作为实体框架数据访问层核心的类DbContext
或旧类。ObjectContext
它通过强类型实体集提供透明的数据库访问,跟踪和保存更改,管理数据库事务和连接,并包含许多实用方法来促进各种数据访问任务(尤其是DbContext
)。
模型
这可以是两(或三)件事。
所以上下文和模型是两个完全不同的东西。你可能会说上下文是两种不同类型模型之间的中间人。
粗略地说,上下文与数据库连接或会话相关,其中模型是表、视图等与数据访问对象类(即,将包含数据的对象)之间的映射
模型是一个类,它通常表示一个数据库表或用于显示数据库表的结构。例如,如果我有一个汽车数据库,那么汽车模型可以是
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; }
}