在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.增
//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(); }