由于我是自学的,没有人教,在网上查资料也查不到个所以然、问大神们也是爱理不理的。

所以这篇随笔纯粹源自于我自己的认识。是否真正正确我也没有把握。

如果有什么错误,请大神们给予指正

===========================================

(一)、增加、删除、修改操作,都可以直接调用dbset<>集合的Add()、AddRange()、Remove()、AddOrUpdate()  几个方法、然后调用DbContext.SaveChange()实例对象方法,实现增删改。

数据上下文baglEntities 中有一个actionlist的dbset集合

public partial class baglEntities : DbContext
{
public baglEntities()
: base("name=baglEntities")
{
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
} public virtual DbSet<actionlist> actionlist { get; set; }
}
public void test()
{
  
baglEntities bg=new baglEntities();
}

1、增加:bg.actionlist.Add(actionlist类型的对象);   bg.SaveChange();

2、删除:bg.actionlist.Remove(从actionlist集合中查找到的对象); bg.SaveChange();

3、修改:bg.actionlist.AddOrUpdate(从actionlist集合中拿到的对象);bg.SaveChange();

=================================================================

教程上是这样说的,可是很多时候,我们找不到AddOrUpdate()方法?

(二)、利用状态跟踪实现增删改(EF中增删改的表层原理)

    DbContext中有一个方法Entry(实体对象),这个方法要求传入一个实体对象,这个方法的返回值有一个state属性。bg.Entry(actionlist实体对象).state

  这个state属性是一个EntityState枚举,该枚举包含5个值:Added、deleted、UNchanged、Modifield、Detached。  顾名思义,这个枚举用来标注实体对象的状态。

    EntityState枚举这五个值的含义书面解释比较绕口,我用常用说法来解释下:

    (1)Added:把指定对象的状态标注为增加。

    (2)deleted:把指定对象的状态标注为删除。

    (3)Modifield:把指定对象的状态标注为修改。

    (4)UNchanged:把指定对象的状态标注为未改变(也就是这个实体对象从数据库中刚刚拿到,没有做任何改变)

    (5)Detached:没有与dbset集合挂钩的对象的状态。

  通过操作状态,给state属性赋状态,再调用SaveChange();方法,EF就能够自动的对对象进行增删改操作。

  实际上,EF的ADD  REMOVE  其实就是通过操作状态,之后根据实体对象的状态进行SQL的组装。假如给一个实体对象状态设置成Added。EF检测到这个对象状态为Added就会根据这个对象制作Insert 命令发往数据库。最终完成插入数据。

2017年2月22日-----------乱码新手自学.net 之Entity Framework 增删改的更多相关文章

  1. 2017年2月16日-----------乱码新手自学.net 之MVC模型

    第二篇博文,最近学习的内容还是回到了正题:ASP.NET MVC5之上.虽然EF学了个一知半解,但是用这点知识,看MVC5的MODEL部分应该还是够了.尽管周末还要恶补一下EF才行. (一)MVC简述 ...

  2. 2017年3月14日-----------乱码新手自学.net 之Authorize特性与Forms身份验证(登陆验证、授权小实例)

    有段时间没写博客了,最近工作比较忙,能敲代码的时间也不多. 我一直有一个想法,想给单位免费做点小软件,一切思路都想好了,但是卡在一个非常基础的问题上:登陆与授权. 为此,我看了很多关于微软提供的Ide ...

  3. 2017年2月28日-----------乱码新手自学.net 之特性与验证

    现在看asp.net MVC5自学已经到了第六章:数据注解与验证. 话得从以前看MVC music store(音乐商店项目)的源码说起, 最初看music store源码完全就是一脸懵逼,整个程序, ...

  4. Python 爬虫练习(二)爬取补天公益SRC厂商域名URL (2017年11月22日)

    介绍下: 补天是国内知名的漏洞响应平台,旨在企业和白帽子共赢. 白帽子在这里提交厂商漏洞,获得库币和荣誉,厂商从这里发布众测.获取漏洞报告和修复建议. 在2017年3月份之前,补天的厂商域名URL是非 ...

  5. 2017年5月22日 HTML基础知识(一)

    一.Html 结构 1.1.HTML基本文档格式—<html> 标记 —<html>文档的头部好和主体内容 </html>  根标记 —<head> 文 ...

  6. 2017年10月22日 基础SQL语句&数据库创建主外键关系

    1.SQL语句的注释 双减号:-- 或者/**/2.创建数据库create database 数据库名称(不允许以数字开头,不允许以符号开头,不要起汉语名字) 3.如何选中这个数据库use 数据库名 ...

  7. 2017年9月22日 关于JS数组

    JS数组 JS数组的定义方法 var arr = []; var arr = new Array() JS数组属性 长度 arr.length 遍历数组 索引值:从0开始数 第一种方法 for(var ...

  8. 2017年9月22日作业 c++算术运算符 自增 自减 逻辑运算符 位运算符 条件运算符(三元运算符)

    作业1: c++算术运算符试题,分析下面程序的输出结果是什么 //第一个: int x=8999;int value=x*1000/1000; //第二个 int x=8999;int value=x ...

  9. 微软SQL Server认证最新信息(17年5月22日更新),感兴趣的进来看看哟

    之前一直有在关注微软认证的一些消息,由于最新的SQL Server认证加入了2016的相关内容,导致课程资料需要大部分更新,但是微软更新相对比较慢,并且经常改版,目前发现的最新的MCP Cert Pa ...

随机推荐

  1. bzoj1070 修车&& bzoj2879美食节 【费用流】

    bzoj1070: 把每个工人拆成汽车那么多个点,假如说 工人(i, j) 和 汽车k 连边,那就代表第i个工人倒数第j个修汽车k,那么这条边对以后的贡献就是k*time[i修k]. #include ...

  2. cocos2d-x介绍

    总体来说,cocos2d-x是一个优秀的库. Cocos2d-x没有很复杂的一个架构,基本上是一些以单件形式提供的管理器和是一些围绕SceneGraph(CCNode及其派生类)展开的类.这个设计使得 ...

  3. Java链表的一些操作:

    [还有一些其他的算法提]http://blog.csdn.net/WalkingInTheWind/article/category/906980 [转]http://blog.csdn.net/lu ...

  4. thinkPHP的学习

    1.版本,以3.1为主,因为手册是基于这个的,最新的版本,还没有对应的手册 2.发现一个问题,echo 中文时,出现乱码,而调用模版则正常. 3.写url的注意大小写.index和Index是不同的 ...

  5. Linux文件编辑之sed命令

    文件编辑之sed命令 sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为模式空间 (pattern space ...

  6. android开发学习——day3

    关于android开发的详细过程了解 Android App程序的四种重要组成类型:1.Activity 2.Service 3.Content Provider 4.Broadcast Receiv ...

  7. Apache/nginx转发设置-分布式部署

    Apache转发设置1. Weblogic安装 Weblogic8和Weblogic10默认安装,选择完全安装即可,如果是Weblogic9则选择自定义安装,勾选WebService plugin 2 ...

  8. PHP加水印代码 支持文字和图片水印

    PHP加图片水印.文字水印类代码,PHP加水印类,支持文字图片水印的透明度设置.水印图片背景透明.自己写的一个类,因为自己开发的一套CMS中要用到,网上的总感觉用着不顺手,希望大家也喜欢这个类,后附有 ...

  9. PHP 合并数组 追加数组例子

    PHP合并数组我们可以使用array_merge()函数,array_merge()函数返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次追加.其形式为: arra ...

  10. vimplugin破解

    必较常用的vi插件有:viplugin.Vrapper.eclim Vrapper没有用过,eclim在公司电脑上装,总是不能正常的连接gvim,所以也没有用 Viplugin,常用功能基本都有... ...