📅  最后修改于: 2023-12-03 14:40:59.436000             🧑  作者: Mango
Entity Framework(EF)是一个面向对象的ORM(对象关系映射)框架,允许程序员通过使用CLR对象模型操作关系数据库。一个CLR类型(或称为实体)在EF中映射到数据库中的表。在EF中有许多不同的类型,下面我们来详细介绍一些。
实体(Entity)就是CLR中的一个类,它映射到数据库中的一张表。实体可以有属性、方法和行为。实体是EF中最基本的类型,所有其他类型都依赖于它。定义实体时需要标记一个主键,并且可以定义关系属性,如导航属性来表示与其他实体的关系。
示例代码:
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public int DepartmentId { get; set; }
public virtual Department Department { get; set; }
}
public class Department
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Employee> Employees { get; set; }
}
DbContext是EF核心的组成部分,它代表了一个数据库的会话。它负责跟踪实体的变化(增、删、改)并把这些变化同步到数据库中。DbContext还提供了一些查询数据的方法,如Find、ToListAsync、SingleOrDefault等。
示例代码:
public class EmployeeDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<Department> Departments { get; set; }
}
DbSet是一个泛型类,它表示一个与数据库中表对应的集合,可以通过LINQ查询表中的数据。DbSet还提供了一些方法可以直接执行SQL语句。
示例代码:
using (var db = new EmployeeDbContext())
{
var employees = db.Set<Employee>().ToList();
var departments = db.Departments.Where(d => d.Name == "IT").ToList();
}
数据库上下文(Database Context)表示一个数据库连接和一个或多个DbSet的实例。通常情况下,每个数据库都有一个DbContext。在asp.net core中,通常使用DI(依赖注入)来创建DbContext实例。
示例代码:
public void ConfigureServices(IServiceCollection services)
{
var connection = Configuration.GetConnectionString("EmployeeDb");
services.AddDbContext<EmployeeDbContext>(options => options.UseSqlServer(connection));
}
迁移(Migration)是EF用来保持数据库结构与代码模型同步的重要机制。EF核心会跟踪和记录数据库结构的变化,并把这些变化保存为一个或多个迁移脚本,开发人员可以在需要更新数据库结构时执行这些脚本。
示例代码:
dotnet ef migrations add AddAddress --context EmployeeDbContext
dotnet ef database update --context EmployeeDbContext