码迷,mamicode.com
首页 > Web开发 > 详细

MVC学习-用EF做增删改查

时间:2014-12-31 18:11:52      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

在DbContext中有两个很重要的方法:

一、几个方法的说明

1.一个是Entry()方法:

public DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;

可以将 任何类型的数据放入到上下文对象中

DbEntityEntry有个 属性EntityState,它可以为上下文中的对象做标识,并依照标识的值做相应的sql操作

public enum EntityState
    {       
        Detached = 1,     
        Unchanged = 2,      
        Added = 4,      
        Deleted = 8,        
        Modified = 16,
    }

2.还有一个Set()方法

public DbSet<TEntity> Set<TEntity>() where TEntity : class;

//通过public DbSet<TEntity> Set<TEntity>() where TEntity : class;和
//public virtual DbSet<Users> Users { get; set; }知道
//Set<Users>就是Dbset<Users>类型,所以context.Set<Users>()就等价于context.Users

3.操作中几个方法的说明:

SaveChange():EF在SaveChanges的时候,会遍历上下文内容器里的所有实体对象,并检查对象的State 属性,生成相应的SQL语句,在一次性发到数据库中执行

几个知识点:

1.上下文内部默认实现了,对其中的对象进行了追踪。当A取出数据准备修改Data时;这个时候B可以取出数据Data,但不能修改,因为当前追踪器在A那边,直等到A释放了资源,B才可进行相应的操作。

 

二、增删改查

1.增

//1.创建上下文对象,因为上下文对象中包含要操作的对象Users
MyDBEntities context = new MyDBEntities();
//2.因为Entry需要传入一个对象,所以创建要添加的类型的对象
Users u = new Users() {Name = "kim", Age = 23};
//3.使用标记的方式来做增加
context.Entry<Users>(u).State=EntityState.Added;
//4.保存到数据库,因为EF是延迟操作的,如果不执行List()等操作,不会执行sql语句
context.SaveChanges();

2.删

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

//1.创建一个包含主键的对象 
Users u = new Users() { Id = 3 };
//2.标识为删除
context.Entry<Users>(u).State = EntityState.Deleted;
//3.保存到数据库
context.SaveChanges();

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();

4.查

4.1普通查

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

4.2分页查

/// <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> GetPageList3<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();
 }

MVC学习-用EF做增删改查

标签:

原文地址:http://www.cnblogs.com/2star/p/4196054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!