程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> MVC學習-用EF做增刪改查,mvcef

MVC學習-用EF做增刪改查,mvcef

編輯:C#入門知識

MVC學習-用EF做增刪改查,mvcef


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved