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

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

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

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

(一)、增加、删除、修改操作,都可以直接调用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. gulp学习指南之CSS合并、压缩与MD5命名及路径替换

    1.引入插件 var gulp = require('gulp'), // uglify = require('gulp-uglify'), concat = require('gulp-concat ...

  2. Linux搭建Tomcat

    Linux系统运行确实很好,但是开发用,估计很少人用吧? 一.安装 1.下载tar.gz文件 2.解压,可以使用mv命令修改文件名 3.建立软连接: ln -s /usr/local/tomcat8. ...

  3. Bzoj3756

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3756 题解:乱搞 代码: #include<iostream> #include ...

  4. python with用法

    python中with可以明显改进代码友好度,比如: with open('a.txt') as f: print f.readlines() 为了我们自己的类也可以使用with, 只要给这个类增加两 ...

  5. OD提示 "为了执行系统不支持的动作, OllyICE 在这个被调试的程序中注入了一点代码, 但是经过5秒仍未收到响应..." 解决办法

    别的OD就可以,我自己整合过的一个很顺手的OD就是不行,最后找到了解决办法: 转自:http://bbs.pediy.com/showthread.PHP?t=97629 -------------- ...

  6. Delphi中的窗体创建与销毁

    Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时候你是不能操作本程序的其他窗体的,你不能把焦 ...

  7. Windows server 2008 R2 64位系统安装ZendOptimizer-3.3.0a-Wind

    如果不安装ZEND的话,一些PHP网站程序使用ZEND加密后就无法使用,比如DISCUZ,SHOPEX,ECSHOP等,所以要想安装这些程序,ZEND是一定要安装的,要不会出现乱码等问题. 安装ZEN ...

  8. C标准I/O建立一个文件仓库

    实现了 增删改查 创建了一个结构体 保存 num name cout price 代码 #include<stdio.h>#include<string.h>#include& ...

  9. MySQL5.6自动化部署(二进制)

    ###### 二进制自动安装数据库脚本root密码MANAGER将脚本和安装包放在/root目录即可############### ######数据库目录/usr/local/mysql####### ...

  10. Java Web快速入门——全十讲

    Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...