📜  Entity Framework-类型(1)

📅  最后修改于: 2023-12-03 14:40:59.436000             🧑  作者: Mango

Entity Framework类型

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

DbContext是EF核心的组成部分,它代表了一个数据库的会话。它负责跟踪实体的变化(增、删、改)并把这些变化同步到数据库中。DbContext还提供了一些查询数据的方法,如Find、ToListAsync、SingleOrDefault等。

示例代码:

public class EmployeeDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }
    public DbSet<Department> Departments { get; set; }
}
DbSet

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)

数据库上下文(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