Entity Framework Core 之Saving Data

Saving Data

数据可以通过实体进行创建、删除和修改

 

Base Save

1)         添加实体数据

通过DbContext.DbSet<TEntity>.add方法添加一个实体对象数据,当调用Savechanges()将数据保存到数据库中,如下:

 

2)         更新实体数据

在EF CORE中的DbContext对象都会有变化追踪器,用来追踪实体的数据变化。所以默 情况下,只要更改实体对象的数据,然后调用Savechanges()就会自动更新到数据库

 

在实际应用中有多种方式来进行数据更新,当只更新实体的某个属性时,推荐使用Attach()方法,在用save保存;当更新整个实体内容时,则使用EntityState.Modified属性来修改更加合适。

3)         删除实体数据

通过DbContext.DbSet<TEntity>.remove方法移除一个实体对象数据,若实体存在则调用Savechanges()后将从数据库删除实体数据;若实体不存在,则不会做任何操作。

 

级联删除操作(Cascade Delete),级联操作是主体和依赖体之间通过级联操作删除一方,则另一方也将会删除。级联分为三种操作分别如下:

Casecade:当主体被删除时,依赖实体将会同样被删除

SetNull: 当主体被删除时,依赖体中的外检属性将设置为null

Restrict:当主体被删除时,删除操作不应用在依赖实体中

Related Data(关联导航属性)

  1. 添加一个新实体到关联属性也添加:如下在创建Blog实体的同时也创建导航属性Post

 

  1. 新增一个实体导航属性存在

 

  1. 改变关系:改变现在所关联的导航属性

 

  1. 移除关系

 

Cascade Delete (级联删除)

有三种方式控制当主体实体删除,依赖实体是否删除的删除操作。

ü  Cascade:依赖实体将跟随主体删除,即主体实体删除,则依赖实体也删除

ü  SetNull:在依赖实体中将外键属性设置为空,即主体实体删除,则依赖实体不删除

ü  Restrict:依赖实体不收主体删除的影响

 

Concurrency Conflicts(并发冲突)

EF Core中有三种值可以帮助处理并发冲突,分别是:

  • Current Values(当前值):表示即将写入到数据库中的数据
  • Original Values(原始值):在没有任何编辑的情况下从数据库检索的值
  • Database Values(数据库值):目前存储在数据库中的值

解决并发冲突情况是通过捕获SaveChanges()的DbupdateConcurrencyException异常,然后在异常中轮询Entries找到以上三个值进行处理。

 

Transactions

事务处理允许服务器数据库以原子的方式处理数据,当事务提交后(Commit),表示成功执行所有操作,但是若其中一个未执行,则将会将所有的操作还原(Rollback)。在EF Core默认情况下当执行SaveChanges()进行插入、更新或删除数据库操作,实际后台是执行一个事务中的运行,且本次事务会执行足够长时间来完成。但是有时候 SaveChanges()的事务操作是远远不够的,所以需要手工配置事务如下:

 

l  分享连接和事务处理

有的时候在多个数据提供者存在的情况下,需要共用一个事务操作,则可以采用如下:

 

l  使用扩张的DbTransactions(仅仅关系数据库)

当存在多个数据技术同时使用,有可能会使用同一个数据库事务

原文地址:https://www.cnblogs.com/Terrece/p/8107921.html