zoukankan      html  css  js  c++  java
  • EF 增删改查

    一 介绍

    说起EF的增删改操作,相信很多人都会说,有两种方式:① 通过方法操作  和  ② 通过状态控制。

    二 核心结论

     SaveChangs的时候一次性保存本地属性状态的全部变化.(换言之:只有本地缓存属性的状态发生变化了,SaveChanges才会实际生效)

    补充:这里的属性状态的变化是存在于服务器端,一定不要理解为存在于本地,这也是为什么EF上下文不能用单例创建了。

      EF的本地缓存属性的三种形式:

        ①.通过Attach附加.

        ②.通过EF的即时查询,查询出来的数据,自动就本地缓存了.

        ③.通过状态控制. eg:Added、Modified、Deleted. (db.Entry(sl).State = EntityState.Added;)

    2. EF的增删改操作的操作有两种形式

    (一). 通过方法来操控

      a. 增加1个实体.   Add() 不需要Attach()附加.(当然附加了也不受影响)

      b. 增加1个集合.   AddRange() 不需要Attach()附加.(当然附加了也不受影响)

      c. 删除. Remove().   分两种情况:

        特别注意:如果数据为空,会报错.所以在实际开发过程中,要采用相应的业务逻辑进行处理.

        ①:自己创建了一个实体(非查询出来的),必须先Attach,然后Remove.

        ②:访问数据库,即时查询出来的数据(已经放到EF本地缓存里了),可以省略Attach,直接Remove(当然附加了也不受影响)

      d. 修改(如果数据主键不存在,执行增加操作). AddOrUpdate(),可以省略Attach,直接AddOrUpdate.

         需要引用程序集:using System.Data.Entity.Migrations;

        ①: 如果是执行增加操作,不需要进行Attach附加,但附加了Attach不受影响

        ②:如果是执行修改操作,不能进行Attach的附加,附加了Attach将导致修改失效,saveChange为0(无论是自己创建的或即时查询出来的,都不能进行Attach的附加)

      e. 修改. 不需要调用任何方法.

        该种方式如果实体为空,SaveChanges时将报错.

        ①:自己创建对象→先Attach(根据主键来区分对象)→然后修改属性值→最后saveChange

        ②: EF即时查询对象(自动本地缓存)→然后修改属性值→最后saveChange

    (二). 通过修改本地属性的状态来操控.

      (该种方式本身已经改变了本地缓存属性了,所以根本不需要Attach附加)

      a. 增加. db.Entry(sl).State = EntityState.Added;

      b. 删除. db.Entry(sl).State = EntityState.Deleted;

        特别注意:如果数据为空,会报错.所以在实际开发过程中,要采用相应的业务逻辑进行处理.

        ①.适用于自己创建对象(根据主键来确定对象),然后删除的情况.

        ②.适用于即时查询出来的对象,然后进行删除的情况.

      c. 修改. db.Entry(sl).State = EntityState.Modified;

          特别注意:如果数据为空,会报错.所以在实际开发过程中,要采用相应的业务逻辑进行处理.

          ①.适用于自己创建对象(根据主键来确定对象),然后修改的情况.

          ②.适用于即时查询出来的对象,然后修改的情况.

  • 相关阅读:
    html5快速入门(四)—— JavaScript
    SJPullDownMenu下拉菜单框架使用
    HTML5快速入门(三)—— 标签综合运用
    html5快速入门(二)—— CSS简介
    html5快速入门(一)—— html简介
    Robotium测试套管理测试用例
    从GitHub远程仓库中删除文件夹或文件
    上传本地代码到GitHub
    Jenkins关联GitHub进行构建
    Jenkins忘记用户名密码
  • 原文地址:https://www.cnblogs.com/haigui-zx/p/11573853.html
Copyright © 2011-2022 走看看