EF Core实体的五种不同的状态

Entity Framework Core

Entity Framework Core是一个基于.NET Core的ORM框架,用于将对象表示转换为数据库中的数据。它提供了一组API,使得开发人员可以使用面向对象的方式来对关系数据库进行操作。

实体对象五种不同的状态:

  1. Detached(未跟踪):实体对象没有被上下文追踪,也没有和数据库进行关联。这通常发生在新创建的对象或者已经从上下文中删除的对象上。
  2. Unchanged(未修改):实体对象已经被上下文追踪,并且与数据库中的数据一致。这意味着该实体对象的属性没有被修改过。
  3. Added(新增):实体对象是通过上下文的Add方法添加到上下文中的,但尚未保存到数据库。此时,对象被标记为新增状态。
  4. Modified(已修改):实体对象的一个或多个属性已被修改。这通常发生在修改了实体对象的属性后,但尚未调用上下文的SaveChanges方法进行保存操作。
  5. Deleted(已删除):实体对象是通过上下文的Remove方法从上下文中移除的,但尚未从数据库中删除。此时,对象被标记为删除状态。
    这些实体状态反映了实体对象在上下文中的状态以及其与数据库之间的关系。根据实体对象的状态,Entity Framework Core会执行相应的操作来保持对象与数据库的一致性,例如插入、更新或删除操作。

Detached(未跟踪):

场景:当你需要创建一个新的实体对象,并且不打算将其与数据库关联时,可以使用未跟踪状态。

csharp 复制代码
var newEntity = new Entity { Name = "New Entity" };// 此时newEntity处于Detached状态

Unchanged(未修改):

场景:当你查询数据库并获取一个实体对象时,该对象的属性与数据库中的数据一致,且不需要进行任何修改时,可以使用未修改状态。

csharp 复制代码
var entity = dbContext.Entities.FirstOrDefault(e => e.Id == entityId);// 此时entity处于Unchanged状态

Added(新增):

场景:当你想要将一个新创建的实体对象保存到数据库时,可以使用新增状态。

csharp 复制代码
var newEntity = new Entity { Name = "New Entity" };
dbContext.Entities.Add(newEntity);// 现在newEntity处于Added状态

Modified(已修改):

场景:当你需要修改实体对象的属性,并将这些更改保存到数据库时,可以使用已修改状态。

csharp 复制代码
var entity = dbContext.Entities.FirstOrDefault(e => e.Id == entityId);
entity.Name = "Updated Name";// 此时entity处于Modified状态

Deleted(已删除):

场景:当你想要从数据库中删除一个实体对象时,可以使用已删除状态。

csharp 复制代码
var entity = dbContext.Entities.FirstOrDefault(e => e.Id == entityId);
dbContext.Entities.Remove(entity);// 现在entity处于Deleted状态

演示了如何使用Entity Framework Core进行数据操作:

步骤一

安装Entity Framework Core NuGet包:

Install-Package Microsoft.EntityFrameworkCore

步骤二

创建一个数据库上下文类,并在该类中定义要映射到数据库的实体:

csharp 复制代码
using Microsoft.EntityFrameworkCore;

public class MyDbContext : DbContext
{
    public DbSet<Entity> Entities { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        //连接自己数据库
        optionsBuilder.UseSqlServer("Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True");
    }
}

步骤三

创建实体Entity

csharp 复制代码
public class Entity
{
    public int Id { get; set; }
    public string Name { get; set; }
}

步骤四

使用数据库上下文类来执行数据操作:

csharp 复制代码
using (var dbContext = new MyDbContext())
{
    // 新增一个实体对象
    dbContext.Entities.Add(new Entity { Name = "New Entity" });

    // 查询所有实体对象
    var entities = dbContext.Entities.ToList();

    // 修改一个实体对象
    var entity = dbContext.Entities.FirstOrDefault(e => e.Id == entityId);
    entity.Name = "Updated Name";

    // 删除一个实体对象
    var entityToRemove = dbContext.Entities.FirstOrDefault(e => e.Id == entityId);
    dbContext.Entities.Remove(entityToRemove);

    // 将所有更改保存到数据库
    dbContext.SaveChanges();
}
相关推荐
零炻大礼包43 分钟前
【SQL server】数据库远程连接配置
数据库
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
随心............1 小时前
python操作MySQL以及SQL综合案例
数据库·mysql
€☞扫地僧☜€1 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
CopyDragon1 小时前
设置域名跨越访问
数据库·sqlite
xjjeffery1 小时前
MySQL 基础
数据库·mysql
写bug的小屁孩1 小时前
前后端交互接口(三)
运维·服务器·数据库·windows·用户界面·qt6.3
恒辉信达1 小时前
hhdb数据库介绍(8-4)
服务器·数据库·mysql
Envyᥫᩣ2 小时前
C#语言:从入门到精通
开发语言·c#
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb