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(未跟踪):

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

var newEntity = new Entity {
    Name = "New Entity" };// 此时newEntity处于Detached状态

Unchanged(未修改):

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

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

Added(新增):

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

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

Modified(已修改):

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

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

Deleted(已删除):

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

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

步骤二

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

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

public class Entity
{
   
    public int Id {
    get; set; }
    public string Name {
    get; set; }
}

步骤四

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

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();
}

相关推荐

  1. EF Core实体不同状态

    2024-01-07 09:56:03       56 阅读
  2. linux不同场景下修改文件名方法

    2024-01-07 09:56:03       34 阅读
  3. c++ 线程状态

    2024-01-07 09:56:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 09:56:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 09:56:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 09:56:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 09:56:03       20 阅读

热门阅读

  1. uniapp分包

    2024-01-07 09:56:03       34 阅读
  2. npm配置文件 .npmrc 加载优先级和使用示例

    2024-01-07 09:56:03       32 阅读
  3. Copilot在PyCharm的应用

    2024-01-07 09:56:03       61 阅读
  4. vue,小程序,uni-app的生命周期?

    2024-01-07 09:56:03       41 阅读
  5. Python使用函数求素数和

    2024-01-07 09:56:03       36 阅读