Entity Framework Core(EF Core)是一个轻量级、跨平台的对象关系映射(ORM)框架,用于在.NET应用程序中处理数据库操作。它提供了一种将数据库中的数据映射到.NET对象模型的方法,使开发人员可以使用面向对象的方式进行数据库操作,而无需直接编写SQL语句。
上一篇文章讲了在C#中EF Core查询和加载模式:C#使用Entity Framework Core处理数据库(二)
接下来讲讲使用EF Core操作数据
1.插入实体
要使用Entity Framework Core插入实体,你需要首先创建一个DbContext类,并在其中包含用于访问数据库的DbSet属性。然后,你可以实例化实体对象并将其添加到相应的DbSet属性中。最后,调用SaveChanges()方法以将更改保存到数据库中。
// 创建实体类
public class Product
{public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }
}
// 创建DbContext类
public class AppDbContext : DbContext
{public DbSet<Product> Products { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseSqlServer("your_connection_string");}
}
// 插入实体
using (var context = new AppDbContext())
{var newProduct = new Product { Name = "New Product", Price = 100 };context.Products.Add(newProduct);context.SaveChanges();
}
2.更新实体
要更新实体,首先检索要更新的实体对象,然后对其属性进行更改,并最终调用SaveChanges()方法将更改保存到数据库中。以下是一个更新实体的示例:
// 更新实体
using (var context = new AppDbContext())
{var productToUpdate = context.Products.FirstOrDefault(p => p.Id == 1); // 假设要更新Id为1的产品if (productToUpdate != null){productToUpdate.Name = "Updated Product";productToUpdate.Price = 150;context.SaveChanges();}
}
3.删除实体
要删除实体,首先检索要删除的实体对象,然后将其从DbContext中的DbSet属性移除,并最终调用SaveChanges()方法将更改保存到数据库中。以下是一个删除实体的示例:
// 删除实体
using (var context = new AppDbContext())
{var productToDelete = context.Products.FirstOrDefault(p => p.Id == 1); // 假设要删除Id为1的产品if (productToDelete != null){context.Products.Remove(productToDelete);context.SaveChanges();}
}
4.事务
事务是指作为单个逻辑工作单元执行的操作集合,这些操作要么全部成功完成并永久生效,要么全部失败并回滚到之前的状态。在数据库系统中,事务用于确保数据操作的一致性和完整性。
事务通常具有以下四个标准特性(ACID):
- 原子性(Atomicity):事务中的所有操作要么全部成功完成,要么全部失败回滚,没有部分成功的情况。
- 一致性(Consistency):事务使得数据从一个一致的状态转变到另一个一致的状态,不会破坏数据完整性约束。
- 隔离性(Isolation):事务在并发执行时,每个事务的操作对其他事务是隔禅的。这意味着每个事务对数据的操作应该互相独立,避免相互影响。
- 持久性(Durability):一旦事务被提交,其对数据的改变应该是永久性的,即使系统发生故障也不会丢失。
在编程中,使用事务可以确保一组操作要么全部成功,要么全部撤销,以确保数据的完整性和一致性。
隔离级别 | 锁 | 允许的完整性问题 |
---|---|---|
读未提交 (Read Uncommitted) | 无锁 | 脏读 (Dirty Read), 非重复读 (Non-Repeatable Read) |
读已提交 (Read Committed) | 读取时加共享锁 | 非重复读 (Non-Repeatable Read), 幻读 (Phantom Read) |
可重复读 (Repeatable Read) | 读取时加共享锁 | 幻读 (Phantom Read) |
串行化 (Serializable) | 读取时加排他锁 | 无 |
定义显示事物
在Entity Framework Core中,可以使用DbContext类的Database 属性来定义和控制事务。以下是一些示例代码,演示了如何在EF Core中定义和使用事务:
// 开始事务
using (var context = new AppDbContext())
{using (var transaction = context.Database.BeginTransaction()){try{// 执行一些操作var product1 = new Product { Name = "Product 1", Price = 50 };context.Products.Add(product1);var product2 = new Product { Name = "Product 2", Price = 75 };context.Products.Add(product2);// 保存更改到数据库context.SaveChanges();// 提交事务transaction.Commit();}catch (Exception){// 发生异常时回滚事务transaction.Rollback();}}
}
感谢您阅读本文中关于Entity Framework Core的示例代码和说明。希望这些示例能够帮助您更好地理解在C#中Entity Framework Core(EF Core)基本概念和操作数据的方法,包括插入实体、更新实体、删除实体以及事务处理。如果您有任何其他问题或需要进一步的指导,请随时告诉我。祝您编程愉快!