Entity Framework 学习第一天 续
改写第一天的增删改查方法,观察增删改查的本质
using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EFConsole
{
class Program
{
public static remotingEntities dbContext = new remotingEntities();
static void Main(string[] args)
{
//addOtherMethod(); //updateOtherMethod();
//removeOtherMethod();
Console.ReadKey();
}
/// <summary>
/// 另一种添加方法
/// </summary>
public static void addOtherMethod()
{
int res = -;
user tempData = new user() { id="",name="EntityEntry"};
DbEntityEntry<user> entry = dbContext.Entry<user>(tempData);
entry.State = System.Data.EntityState.Added;
res=dbContext.SaveChanges();
Console.WriteLine(res>?"添加成功"+tempData.name:"添加失败");
}
/// <summary>
/// 另一种修改方法
/// </summary>
public static void updateOtherMethod()
{
int res = -;
user tempData = new user() { id = "", name = "update EntityEntry" };
DbEntityEntry<user> entry = dbContext.Entry<user>(tempData);
entry.State = System.Data.EntityState.Unchanged;
entry.Property("name").IsModified = true;
res=dbContext.SaveChanges();
Console.WriteLine(res>?"修改成功":"修改失败");
}
/// <summary>
/// 另一种删除方法
/// </summary>
public static void removeOtherMethod()
{
int res = -;
user tempData = new user() { id = "" };
DbEntityEntry<user> entry = dbContext.Entry<user>(tempData);
entry.State = System.Data.EntityState.Deleted;
res=dbContext.SaveChanges();
Console.WriteLine(res>?"删除成功":"删除失败");
}
}
}
依次执行添加,修改,删除,我们会看到结果。
官方推荐当修改实体数据的时候是先从数据库中查出该实体,然后在做修改操作,但我们总会认为这种方法不太好,在效率上不是很高。所以我们需要找到更好的方法。
我们可以把dbContext上下文看成一个容器,当我们使用它将数据库中的数据查询出来时,它会将数据维护起来,放到容器中,但此时的数据是代理数据,而不是我们的真实数据实体。只有这样才能提高效率,我们可以打开数据库跟踪一下ef发出的sql语句,当一条实体多个字段的时候,如果你只修改一条字段的时候,sql语句也只是修改了一个字段。例如user包括name,age等字段,使用官方推荐的方法,我们想修改id=123的数据,我们先将其查询出来,这样这个实体所有的属性就有值了,当我们只将name属性修改的时候,执行saveChange时,sql语句update中只更新name,而没有更新其他字段的值,这是怎么做到的呢?对,这就是前面说到的代理类起的作用,我们假设代理类将每个属性放置一个标志,如果没有修改过该属性的值,该标志为false,否则为true。当我们更新代理类的时候上下文就可以根据标志来生成sql语句,看代码中修改方法 entry.Property("name").IsModified = true; 这句就是通过设置name属性的标志位,通知上下文,我们将name的属性改变了,所以生成的sql语句中只更新了name字段值。删除和添加同样如此,通知上下文,我们进行添加或删除操作。效率上是不是有很大的提高呢?顺便说一下,上线文的saveChanges也是提高效率的方法,该方法可以进行批处理,就是说添加多个对象的时候connection只进行一次连接,执行多条语句,可以跟踪一下数据库查看一下。其实svaeChanges也就是遍历上线文中的每个数据代理对象,看哪个对象状态是增删改方法,生成sql语句,然后一次性执行。
Entity Framework 学习第一天 续的更多相关文章
- Entity Framework 学习第一天
文章是作为初学者记录之用,没有学习过的同学可以借鉴一下,至于用过和高手嘛,就算了吧.仅是入门.废话不多说了,马上新建个项目,添加Entity Framework,这个词以下将用EF代替. 本文使用的I ...
- Entity Framework 学习第二天 续
今天来写一点不一样的删除,修改,查询 下面只写了几个方法 /// <summary> /// 根据删除条件进行删除 /// </summary> /// <param n ...
- Entity Framework 学习整理(分播客整理)
MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...
- Entity Framework学习笔记
原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总 之前的小项目做完了,到了总结经验和 ...
- Entity Framework 学习中级篇1—EF支持复杂类型的实现
本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...
- Entity Framework 学习
Entity Framework 学习初级篇1--EF基本概况 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry. ...
- ADO.NET Entity Framework学习笔记(3)ObjectContext
ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转] 说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...
- Entity Framework 学习整理
MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...
- Entity Framework 学习笔记(2)
上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// ...
随机推荐
- python字符串常用操作方法
python字符串操作常用操作,如字符串的替换.删除.截取.复制.连接.比较.查找.分割等,需要的朋友可以参考下. 1.去除空格str.strip():删除字符串两边的指定字符,括号的写入指定字符,默 ...
- 使用SurfaceView播放RGB原始视频-2016.01.22
1 程序代码 使用Android中的SurfaceView播放RGB视频数据,SufaceView播放代码如下: package com.zhoulee.surfaceviewdemo; import ...
- python 标准库获取网络信息
c语言ioctl定义的常量 /usr/include/x86_64-linux-gnu/bits/ioctls.h /* Copyright (C) 1996-2015 Free Software F ...
- 五、用户数据报传输(UDP)
1.UDP常用的发送和接收函数 int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,i ...
- Windows phone 8 学习笔记(5) 图块与通知(转)
基于metro风格的Windows phone 8 应用提到了图块的概念,它就是指启动菜单中的快速启动图标.一般一个应用必须有一个默认图块,还可以有若干个次要图块.另外,通知与图块的关系比较密切,我们 ...
- php xml 互相转换
正好昨天才做过类似的需求……几行代码就可以搞定. 如果你使用 curl 获取的 xml data$xml = simplexml_load_string($data);$data['tk'] = js ...
- 从Git仓库中恢复已删除的分支、文件或丢失的commit
亲测可用 因为自己 commit 并且 push 后 因为冲突 提交不了,不小心做了 rebase 代码被 覆盖 用以下命令 还原: 查看所有日志 并记下 hash 值 git reflog 然后用: ...
- EnCase v.s. FTK - find out Chinese characters writing in different direction
A friend of mine said to me that she could fool those forensic tools easily by changing writing dire ...
- win7发送到菜单
在文件浏览器地址栏输入 shell:sendto
- JSON对象遍历方法
JSON对象提前不知道其属性和结构,遍历其值 var json2 = { "name": "txt1", "name2": "tx ...