• 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(仅仅关系数据库)

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

  • 相关阅读:
    不完全恢复用例
    全自动 TSPITR基于RMANSCN
    restore和recover的区别
    DG不同机器自己总结
    将10g RAC库用rman 的方式备份并恢复到异机 刚试验通过与大家分享
    Linux RH5平台下使用Oracle ASM创建数据库
    crs_stat状态失败后unregister掉相关进程
    ocr is not shared across all the nodes in the clus
    RMAN 备份与恢复 实例
    基于LINUX的Oracle+10G+RAC管理维护
  • 原文地址:https://www.cnblogs.com/Terrece/p/8107921.html
Copyright © 2020-2023  润新知