亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

MVC學習-用EF做增刪改查

2019-11-17 02:40:12
字體:
來源:轉載
供稿:網友

MVC學習-用EF做增刪改查

在做增刪改查先,先介紹幾個知識點:

1.代理類

在將對象方法EF數據上下文時,EF會為該對象封裝 一個代理類對象,

同時為該對象的每一個屬性添加一個標志:unchanged,

當對該對象某個屬性進行操作時,該屬性就被標志位Modified,同時也將改對象標志給位Modified,

當調用SaveChanges()方法時,根據標志屬性,生成相應的sql語句。

2.Attach()添加到代理類中(不推薦使用)

Attach()方法時將一個對象附加到EF上下文中,而Attach()返回的是一個實體類,并不是代理類。

一、幾個方法的說明

1.一個是Entry()方法:

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

可以將 對象保存到 EF數據上下文中

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才可進行相應的操作??梢酝ㄟ^設置 Entry(t).State=EntityState.Detatched;不進行追蹤 2.

 

二、增刪改查

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
尤物精品国产第一福利三区| 亚洲精品美女久久| 26uuu日韩精品一区二区| 亚洲精品中文字幕有码专区| 国产精品老牛影院在线观看| 国产精品吴梦梦| 欧美精品情趣视频| 蜜臀久久99精品久久久无需会员| 日韩高清a**址| xxxxx91麻豆| 欧美高清在线视频观看不卡| 亚洲第一av在线| 色婷婷综合久久久久中文字幕1| 欧美日韩亚洲视频| 亚洲第一精品夜夜躁人人躁| 欧美日韩精品二区| 自拍偷拍亚洲区| 国产精品视频免费观看www| 川上优av一区二区线观看| 91高清免费在线观看| 欧美第一黄网免费网站| 亚洲精品久久久久中文字幕欢迎你| 日韩视频永久免费观看| 成人午夜两性视频| 国模精品视频一区二区| 国产精品成人免费电影| 国产中文字幕91| 国产午夜精品久久久| 亚洲欧美日韩精品久久亚洲区| 精品久久久久久久久久ntr影视| 亚洲午夜女主播在线直播| 成人免费直播live| 黑人精品xxx一区一二区| 中文日韩在线视频| 欧美午夜精品久久久久久久| 这里只有视频精品| 国产亚洲一区二区在线| 狠狠色狠狠色综合日日小说| 国产精品自产拍在线观| 欧美激情视频免费观看| 国产精品久久久久久久久久99| 国产成人精品优优av| 国产精品免费福利| 啊v视频在线一区二区三区| 亚洲女同性videos| 成人福利在线视频| 久久精品国产一区| 欧美成人激情视频免费观看| 欧美综合激情网| 欧美一级黑人aaaaaaa做受| 欧美有码在线观看| 91精品免费久久久久久久久| 久久夜色精品亚洲噜噜国产mv| 国产在线精品一区免费香蕉| 久久久久久久爱| 国产欧美日韩综合精品| 日韩av最新在线观看| 国模视频一区二区三区| 久久久久久久爱| 亚洲国产精品一区二区三区| 庆余年2免费日韩剧观看大牛| 欧美日韩性视频在线| 久久九九有精品国产23| 色爱av美腿丝袜综合粉嫩av| 国产在线播放91| 亚洲自拍高清视频网站| 色偷偷av亚洲男人的天堂| 日韩电影中文字幕av| 精品无码久久久久久国产| 日韩的一区二区| 色与欲影视天天看综合网| 日本国产欧美一区二区三区| 福利视频导航一区| 国产精品久久久av| 69av在线视频| 国产日韩欧美电影在线观看| 日韩av影片在线观看| 欧美午夜片欧美片在线观看| 欧美大片免费观看在线观看网站推荐| 久久久久久这里只有精品| 日韩av免费网站| 美女福利视频一区| 亚洲国产天堂久久综合网| 国产成人涩涩涩视频在线观看| 亚洲电影免费观看高清完整版在线| 久久久久成人精品| 亚洲欧美日韩一区二区三区在线| 日韩免费高清在线观看| 日韩精品免费在线播放| 亚洲国产精品福利| 欧美日韩亚洲天堂| 亚洲国产精久久久久久| 永久免费毛片在线播放不卡| 亚洲色图35p| 亚洲精品自拍偷拍| 国产福利视频一区| 亚洲japanese制服美女| 日韩欧美国产免费播放| 亚洲精品91美女久久久久久久| 91久久综合亚洲鲁鲁五月天| 国产精品视频精品| 久久99热精品这里久久精品| 欧美多人爱爱视频网站| 亚洲a成v人在线观看| 亚洲精品美女在线| 色综合天天综合网国产成人网| 色偷偷av亚洲男人的天堂| 欧美精品一区二区三区国产精品| 久久久精品免费视频| 欧美视频专区一二在线观看| 欧美电影免费观看高清| 日韩欧美一区二区三区久久| 亚洲欧美日韩精品久久奇米色影视| 国产一区二区三区18| 日本高清不卡在线| 2018中文字幕一区二区三区| 欧美老女人在线视频| 色在人av网站天堂精品| 欧美大肥婆大肥bbbbb| 国产精品美乳在线观看| 久久精品成人欧美大片古装| 欧美中文在线观看| 日韩激情av在线播放| 亚洲韩国欧洲国产日产av| 久久97精品久久久久久久不卡| 国产精品第二页| 中文字幕亚洲一区二区三区五十路| 亚洲bt天天射| 精品国产一区二区三区四区在线观看| 91久久综合亚洲鲁鲁五月天| 久久精品视频免费播放| 粉嫩老牛aⅴ一区二区三区| 欧美三级欧美成人高清www| 欧美电影第一页| 一区二区亚洲欧洲国产日韩| 成人免费直播live| 亚洲欧洲一区二区三区在线观看| 欧美性猛交xxxx乱大交| 成人久久一区二区三区| 久久精品国产亚洲一区二区| 黑人狂躁日本妞一区二区三区| 91po在线观看91精品国产性色| 亚洲欧美中文字幕| 国产精品人成电影在线观看| 国产精品亚洲欧美导航| 日韩av在线天堂网| 亚洲天堂成人在线| 久久99久久久久久久噜噜| 国产精品久久二区| 亚洲丝袜一区在线| 国产成人在线亚洲欧美| 97成人超碰免| 欧美中文字幕在线视频| 国产成人综合精品在线| 亚洲网址你懂得| 精品自在线视频| 国产精品偷伦一区二区| 亚洲高清在线观看| 日韩中文字幕av| 久久精品电影一区二区| 国产精品看片资源| 亚洲国产成人一区| 在线播放国产一区二区三区| 亚洲视频在线免费观看|