1.增

//1.创建一个EF数据上下文对象
MyDBEntities context=new MyDBEntities();
//2.将要添加的数据,封装成对象
Users user = new Users() {Age = 22, Name = "Kim1"};
//3.将改对象放入EF容器中,默认会为该对象加一个封装类对象(代理类对象)
//用户对对象的操作,实际上是对代理类的操作
//DbEntityEntry保存着实体状态,当对象被加入时,EF默认为该对象设置State的属性为unchanged
DbEntityEntry<Users> entityEntry = context.Entry<Users>(user);
//4.设置对象的标志位Added
entityEntry.State=EntityState.Added;
//5.当调用SaveChanges()时,EF会遍历所有的代理类对象,并根据标志生成相应的sql语句
context.SaveChanges();
Console.WriteLine("添加成功");

2.删

2.1根据Id(表的主键)删除

MyDBEntities context=new MyDBEntities();
Users user = new Users() {Id = 8};
//将要删除的对象附加到EF容器中
context.Users.Attach(user);
//Remove()起到了标记当前对象为删除状态,可以删除
context.Users.Remove(user);
context.SaveChanges();
Console.WriteLine("删除成功");

2.2根据非主键删除

//1.要删除的条件,这里是要删除name为Kim的项
string name = "Kim";
//2.获得name为Kim的对象
var s1 = from s in context.Users
where s.Name==name
select s;
//3.如果有多个的话就用foreach()遍历,这里就删除第一个
context.Users.Remove(s1.FirstOrDefault());
//4.保存到数据库
context.SaveChanges();

3.改

//1.获得要更新后的数据,在mvc中的Action方法,可直接获得 更新后的对象
Users u = new Users() { Id = 4, Name = "kim" };
//2.标识为修改
context.Entry<Users>(u).State = EntityState.Modified;
//3.保存到数据库
context.SaveChanges();

3.1批量修改

/// <summary>
/// 批量编辑 数据
/// </summary>
/// <param name="model">要编辑成 的数据</param>
/// <param name="whereLambda">where条件,输入lambda表示式</param>
/// <param name="modefiedProNames">要修改的 属性名</param>
/// <returns>修改的条数</returns>
public int ModefyBy(Model.Users model, Expression<Func<Model.Users, bool>> whereLambda, params string[] modefiedProNames)
{
//1.查询要修改的数据
List<Model.Users> listModefing = context.Users.Where(whereLambda).ToList();
//获取 实体类 类型对象
Type t = typeof(Model.Users);
//获取 实体类 所有的 公共属性
List<PropertyInfo> proInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
//创建 实体属性 字典集合
Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>();
//将 实体属性 中要修改的属性名 添加到 字典集合中 键:属性名 值:属性对象
proInfos.ForEach(p =>
{
if (modefiedProNames.Contains(p.Name))
{
dictPros.Add(p.Name, p);
}
});
//循环 要修改的属性名
foreach (string proName in modefiedProNames)
{
//判断 要修改的属性名是否在 实体类的属性集合中存在
if (dictPros.ContainsKey(proName))
{
//如果存在,则取出要修改的 属性对象
PropertyInfo proInfo = dictPros[proName];
//取出 要修改的值
object newValue = proInfo.GetValue(model);
//批量设置 要修改 对象的 属性
foreach (Users user in listModefing)
{
//为 要修改的对象 的 要修改的属性 设置新的值
proInfo.SetValue(user, newValue);
}
}
}
//一次性 生成sql语句到数据库执行
return context.SaveChanges();
}

4.查

4.1普通查

//查询Name为Kim的全部数据
var s = context.Users.Where(u => u.Name == "Kim").Select(u => u);

4.2分页查

注意:分页查询的时候,一定要先排序,因为其内部是做了一个row_number()的操作。 
Func<T,bool>是Expression<Func<T,bool>>的缩小,Expression可以理解为就是Lambda的容器

/// <summary>
/// 分页查询
/// </summary>
/// <typeparam name="T">要操作的数据类型</typeparam>
/// <param name="whereLambda">Where条件语句</param>
/// <param name="orderLambda">按什么条件排序</param>
/// <param name="pageSize">每页都少条数据</param>
/// <param name="pageIndex">要查询第几页</param>
/// <returns>返回一个泛型集合</returns>
static List<T> GetPageList<T>(Func<T, bool> whereLambda, Func<T, object> orderLambda, int pageSize,
int pageIndex) where T : class
{
MyDBEntities context = new MyDBEntities();
var list = context.Set<T>().Where(whereLambda).OrderBy(orderLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);
return list.ToList();
}

一、什么是EF?

ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。ADO.NET Entity Framework 以 Entity DataModel (EDM) 为主,将数据逻  辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有Entity Client,Object Context 以及 LINQ 可以使用。

EF的运作流程:

二、如何创建EF:

右击项目——添加——新建项——数据(C#)——选择ADO.NET实体数据模型——点击添加——然后根据实体数据模型向导来一步步的做。

三、实现增删改查功能

方法一

  在DAL层写下增删改查操作的代码

 


一、什么是EF?

   ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。ADO.NET Entity Framework 以 Entity DataModel (EDM) 为主,将数据逻  辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有Entity Client,Object Context 以及 LINQ 可以使用。

EF的运作流程:

二、如何创建EF:

   右击项目——添加——新建项——数据(C#)——选择ADO.NET实体数据模型——点击添加——然后根据实体数据模型向导来一步步的做。

三、实现增删改查功能

  方法一

  在DAL层写下增删改查操作的代码
[csharp] view plain copy
<pre name="code" class="csharp"> //EF查询
public userinfo GetUser(string username)
{
using (MyShopDBEntities1 entity = new MyShopDBEntities1())
{
userinfo user = entity.userinfo.SingleOrDefault(model => model.username == username);
return user;
}
} //修改
public userinfo Update(string username,string userpwd)
{ using (MyShopDBEntities1 entity = new MyShopDBEntities1())
{
// userinfo user = entity.userinfo.SingleOrDefault(model => model.username == username);
userinfo user = entity.userinfo.FirstOrDefault(model => model.username == username);
if (user != null)
{ user.userpassword=userpwd;
entity.SaveChanges();
} return user;
} } //添加
public userinfo Add(userinfo user)
{
using (MyShopDBEntities1 entity = new MyShopDBEntities1())
{
entity.userinfo.Add( new userinfo()
{
username = user.username,
userpwd = user.userpwd
});
if (entity.SaveChanges() > )
{
return user;
}
else
return null;
}
} //删除
public void Deleted(string username)
{
using (MyShopDBEntities1 entity = new MyShopDBEntities1())
{
userinfo user = entity.userinfo.FirstOrDefault(m => m.username == username);
if (user != null)
{
entity.userinfo.Remove(user);
} if (entity.SaveChanges() > )
{
//return 0;
} }
} 方法二: [csharp] view plain copy
EF4.0和EF5.0增删改查的写法区别及执行Sql的方法 EF4.0和EF5.0增删改查的写法区别
public T AddEntity(T entity)
{
//EF4.0的写法
添加实体
//db.CreateObjectSet<T>().AddObject(entity);
//EF5.0的写法
db.Entry<T>(entity).State = EntityState.Added;
//下面的写法统一
db.SaveChanges();
return entity;
}
public bool UpdateEntity(T entity)
{
//EF4.0的写法
//db.CreateObjectSet<T>().Addach(entity);
//db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
//EF5.0的写法
db.Set<T>().Attach(entity);
db.Entry<T>(entity).State = EntityState.Modified;
return db.SaveChanges() > ;
}
public bool DeleteEntity(T entity)
{
//EF4.0的写法
//db.CreateObjectSet<T>().Addach(entity);
//db.ObjectStateManager.ChangeObjectState(entity, EntityState.Deleted);
//EF5.0的写法
db.Set<T>().Attach(entity);
db.Entry<T>(entity).State = EntityState.Deleted;
return db.SaveChanges() > ;
} public IQueryable<T> LoadEntities(Func<T, bool> whereLambda)
{
//EF4.0的写法
//return db.CreateObjectSet<T>().Where<T>(whereLambda).AsQueryable();
//EF5.0的写法
return db.Set<T>().Where<T>(whereLambda).AsQueryable();
}
执行SQL语句
//EF4.0的写法
//int ExcuteSql(string strSql, ObjectParameter[] parameters);
return EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters);
//EF5.0的写法
int ExcuteSql(string strSql, DbParameter[] parameters);
return DEFContextFactory.GetCurrentDbContext().ExecuteSqlCommand(strSql, parameters); 注:增删改操作必须使用entity.SaveChanges()进行保存一下。entity.SaveChanges()返回值为数据库里受影响的行数entity.SaveChanges()>0表示操作成功。如entity.SaveChanges()=0则表示操作失败。

方法二:

注:增删改操作必须使用entity.SaveChanges()进行保存一下。entity.SaveChanges()返回值为数据库里受影响的行数entity.SaveChanges()>0表示操作成功。如entity.SaveChanges()=0则表示操作失败。

C# EF增删改查的更多相关文章

  1. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码 上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间的关系 ...

  2. 分享一个自己写的MVC+EF “增删改查” 无刷新分页程序

    分享一个自己写的MVC+EF “增删改查” 无刷新分页程序 一.项目之前得添加几个组件artDialog.MVCPager.kindeditor-4.0.先上几个效果图.      1.首先建立一个数 ...

  3. WPF MVVM+EF增删改查 简单示例(二) 1对1 映射

    WPF MVVM+EF增删改查 简单示例(一)实现了对学生信息的管理. 现在需求发生变更,在录入学生资料的时候同时需要录入学生的图片信息,并且一名学生只能有一张图片资料.并可对学生的图片资料进行更新. ...

  4. MVC3.0 EF增删改查的封装类

    本人亲身使用EF CodeFirst,因为增删改查都是使用EF内置的一些方法,我想把它封装到一个类调用就行了.结合网上的资料和自己的整理,若有不对的地方望斧正,感激不尽.直接上代码吧.我就用新闻的增删 ...

  5. EF学习笔记-1 EF增删改查

    首次接触Entity FrameWork,就感觉非常棒.它节省了我们以前写SQL语句的过程,同时也让我们更加的理解面向对象的编程思想.最近学习了EF的增删改查的过程,下面给大家分享使用EF对增删改查时 ...

  6. EF增删改查的优化

    在EF的上一篇博客中已经对它的增删改查有了一个简单的了解.当中的改动过程是先要把要改动的内容查出来然后再进行改动.保存.它详细的过程是这种 首先当在运行查询语句的时候"EF数据上下文&quo ...

  7. ef增删改查

    [C#]Entity Framework 增删改查和事务操作 1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长 ...

  8. ASP.NET中使用Entity Framework开发增删改查的Demo(EF增删改查+母版页的使用)

    这里更多的是当作随身笔记使用,记录一下学到的知识,以便淡忘的时候能快速回顾 这里是该项目的第二部分, 第一部分 第二部分(当前部分) 大完结版本 此Demo是新建了一个音乐类型的web,然后使用母版页 ...

  9. (转)构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码

    原文地址:http://www.cnblogs.com/ymnets/archive/2013/11/16/3426454.html 上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间 ...

随机推荐

  1. WCF与Web API 的应用场景

    Web api  主要功能: 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作 请求的回 ...

  2. service 03 iis之服务器无访问权限

    这两天在Service 03 的iis 6.0 里面配置一个aspx 的网站 ,总是遇到一个问题  401.2   无权限访问,于是去百度了一下好多的方法,基本上是关于设置匿名用户,打开IUSER用户 ...

  3. Inno Setup 版本 5.5.3+ 简体中文语言包

    ; *** Inno Setup 版本 + 简体中文消息 *** [LangOptions] LanguageName=<7B80><4F53><> Languag ...

  4. C语言头文件组织与包含原则

    转自:http://www.cnblogs.com/clover-toeic/p/3728026.html 说明 本文假定读者已具备基本的C编译知识. 如非特殊说明,文中“源文件”指*.c文件,“头文 ...

  5. vaadin_demo

    简介:主要一个登陆界面,登陆后跳转到主界面: 主界面功能是点新增,新增人员数据会保存到显示列表中: 一个很简单的demo 下面是截图

  6. 【html+css】关于页面布局中遇到的问题记录

    关于行内元素: 行内元素设置width无效, height无效(可以设置line-height), margin上下无效,padding上下无效,margin和padding可设置左右.   text ...

  7. 【BZOJ3036】绿豆蛙的归宿 拓补排序+概率

    [BZOJ3036]绿豆蛙的归宿 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度. ...

  8. ACM: NBUT 1107 盒子游戏 - 简单博弈

     NBUT 1107  盒子游戏 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:  Practice  Appoint ...

  9. javascript创建跟随鼠标好玩的东西

    不说话,直接上代码. css: #createGoDivBox{ display: none; } #createGoDivBox div{ background-color: #00A6C2; po ...

  10. 【转】安装第三方库出现 Python version 2.7 required, which was not found in the registry

    安装第三方库出现 Python version 2.7 required, which was not found in the registry 建立一个文件 register.py 内容如下. 然 ...