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

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

MVC學習一:EF

2019-11-14 16:15:52
字體:
來源:轉載
供稿:網友

目錄

一.EF修改和刪除的多種方法

二.標準查詢where

三.include

四.skip take

五.反射獲取實例屬性

六.EF DLL數據訪問幫助類

 

一.EF修改和刪除的多種方法

方法1:官方推薦 先查詢在修改 或者刪除

1 var student = db.Students.FirstOrDefault(t => t.Id == Mid);2 student.Name = "修改后";//修改值數據3 db.SaveChanges();//保存 4 db.Students.Remove(student);//移除對象5 db.SaveChanges();//保存

 

方法2:先附加到ef實體對象 然后在移除

1 Students s = new Students();2 s.Id = int.Parse(id);3 db.Students.Attach(s);//將實體附加到 上下文中 ;4 db.Students.Remove(s);5 if (db.SaveChanges() >= 1)6 {7     //成功8 } 

 

方法3:添加到ef實體對象 然后標記刪除

1 Students s = new Students();2 s.Id = int.Parse(id);3 db.Entry<Students>(s).State = System.Data.EntityState.Deleted;//標記刪除4 int num = db.SaveChanges();

 

方法4:修改實體

 1 //這里需要關閉驗證 不然會報錯 2 db.Configuration.ValidateOnSaveEnabled = false; 3 DbEntityEntry dbS = db.Entry<Students>(s); 4 dbS.State = System.Data.EntityState.Unchanged;      //清楚所有字段標記   5 dbS.PRoperty("Gender").IsModified = true;//標記修改字段  6 int num = db.SaveChanges(); 7 db.Configuration.ValidateOnSaveEnabled = true;//打開驗證 8 if (num >= 1) 9 {10     //修改成功11 }

 

二.標準查詢where 在不同場景 實現方法不一樣

1 //場景1:ef的數據集 使用where 是在 IQueryable 的擴展方法2 //場景2:List集合的數據集 使用where 是在 IEnumerable 的擴展方法

 

三.include

場景1:自動 連接查詢【無Include】

1 //1.自動 連接查詢【無Include】2 var stu1 = db.Students.Where(t => t.Classes.CName == "zha");3 var cname = stu1.FirstOrDefault();
 1 SELECT TOP (1)  2 [Extent1].[Id] AS [Id],  3 [Extent1].[CId] AS [CId],  4 [Extent1].[Name] AS [Name],  5 [Extent1].[Gender] AS [Gender],  6 [Extent1].[IsDel] AS [IsDel],  7 [Extent1].[AddTime] AS [AddTime] 8 FROM  [dbo].[Students] AS [Extent1] 9 INNER JOIN [dbo].[Classes] AS [Extent2] ON [Extent1].[CId] = [Extent2].[CID]10 WHERE 'zha' = [Extent2].[CName]

 

場景2:手動 內連接查詢【有Include】

1 //2手動 內連接查詢【有Include】2 var stu2 = db.Students.Include("Classes").Where(t => t.Id == 11);3 var ccc = stu2.FirstOrDefault().Classes.CName;
 1 SELECT  2 [Limit1].[Id] AS [Id],  3 [Limit1].[CId] AS [CId],  4 [Limit1].[Name] AS [Name],  5 [Limit1].[Gender] AS [Gender],  6 [Limit1].[IsDel] AS [IsDel],  7 [Limit1].[AddTime] AS [AddTime],  8 [Extent2].[CID] AS [CId1],  9 [Extent2].[CName] AS [CName], 10 [Extent2].[CCount] AS [CCount], 11 [Extent2].[CImg] AS [CImg], 12 [Extent2].[CIsDel] AS [CIsDel], 13 [Extent2].[CAddTime] AS [CAddTime]14 FROM   (SELECT TOP (1) [Extent1].[Id] AS [Id], [Extent1].[CId] AS [CId], [Extent1].[Name] AS [Name], [Extent1].[Gender] AS [Gender], [Extent1].[IsDel] AS [IsDel], [Extent1].[AddTime] AS [AddTime]15     FROM [dbo].[Students] AS [Extent1]16     WHERE 11 = [Extent1].[Id] ) AS [Limit1]17 LEFT OUTER JOIN [dbo].[Classes] AS [Extent2] ON [Limit1].[CId] = [Extent2].[CID]

 

場景3:無連接查詢 分兩次sql查詢【無Include】

1 //3.無連接查詢 分兩次sql查詢【無Include】2 var stucc = db.Students.Where(t => t.Id == 11);3 var zz = stucc.FirstOrDefault().Classes.CName;
 1 SELECT TOP (1)  2 [Extent1].[Id] AS [Id],  3 [Extent1].[CId] AS [CId],  4 [Extent1].[Name] AS [Name],  5 [Extent1].[Gender] AS [Gender],  6 [Extent1].[IsDel] AS [IsDel],  7 [Extent1].[AddTime] AS [AddTime] 8 FROM [dbo].[Students] AS [Extent1] 9 WHERE 11 = [Extent1].[Id];10 11 SELECT 12 [Extent1].[CID] AS [CID], 13 [Extent1].[CName] AS [CName], 14 [Extent1].[CCount] AS [CCount], 15 [Extent1].[CImg] AS [CImg], 16 [Extent1].[CIsDel] AS [CIsDel], 17 [Extent1].[CAddTime] AS [CAddTime]18 FROM [dbo].[Classes] AS [Extent1]19 WHERE [Extent1].[CID] = @EntityKeyValue1

 

四.skip take

1 //Skip 跳過序列中指定數量的元素,然后返回剩余的元素。2 //Take 從序列的開頭返回指定數量的連續元素。3 //根據這兩個方法可以 實現 分頁效果

 

 

五.反射獲取實例屬性

1 //利用反射 獲取 類 對象 的所有公共 屬性 默認是[GetProperties(BindingFlags.Instance | BindingFlags.Public)]2 var listPro = typeof(Students).GetProperties().ToList();3 object obj1 = new object();4 object obj2 = new object();5 listPro.ForEach(l =>6 {7     var newValue = l.GetValue(obj1); //獲得某個對象的屬性值8     l.SetValue(obj2, newValue);//修改一個對象的屬性 值9 });

 

六.EF DLL數據訪問幫助 父類

  1 using _00EFModel;  2 using System;  3 using System.Collections.Generic;  4 using System.Linq;  5 using System.Linq.Expressions;  6 using System.Reflection;  7 using System.Text;  8 using System.Threading.Tasks;  9  10 namespace _00EFDLL 11 { 12     /// <summary> 13     /// 數據訪問 父類   14     /// </summary> 15     public class BaseDLL<Tclass> where Tclass : class,new() 16     { 17         /// <summary> 18         /// 數據訪問上下文 19         /// </summary> 20         _00EFModel.Entities db = new _00EFModel.Entities(); 21  22         #region 1.0添加數據 + Add(Tclass model) 23         /// <summary> 24         /// 1.0添加數據 25         /// </summary> 26         /// <param name="model"></param> 27         public void Add(Tclass model) 28         { 29             db.Set<Tclass>().Add(model); 30         } 31         #endregion 32  33         #region  2.0 刪除方法1 刪除給定的對象 +Del(Tclass model) 34         /// <summary> 35         /// 2.0 刪除方法1 刪除給定的對象 36         /// </summary> 37         /// <param name="model"></param> 38         public void Del(Tclass model) 39         { 40             //將實體 添加到上下文 41             db.Set<Tclass>().Attach(model); 42             //把實體 標記為刪除 43             db.Set<Tclass>().Remove(model); 44         } 45         #endregion 46  47         #region  2.1 刪除方法2 根據條件刪除對象 +Del(Expression<Func<Tclass, bool>> delWhere) 48         /// <summary> 49         /// 2.1 刪除方法2 根據條件刪除對象  50         /// </summary> 51         /// <param name="delWhere"></param> 52         public void Del(Expression<Func<Tclass, bool>> delWhere) 53         { 54             //查詢所有滿足條件的實體對象 55             var modelS = db.Set<Tclass>().Where(delWhere).ToList(); 56             modelS.ForEach(m => 57             { 58                 //附加到 上下文 59                 db.Set<Tclass>().Attach(m); 60                 //標記為 刪除狀態 61                 db.Set<Tclass>().Remove(m); 62             }); 63         } 64         #endregion 65  66         #region 3.0 修改方法1 修改某個實體的 某些屬性 +Up(Tclass model, params string[] strparams) 67         /// <summary> 68         /// 3.0 修改方法1 修改某個實體的 某些屬性(根據id修改)【*用這個需要注意關閉檢查】 69         /// </summary> 70         /// <param name="model"></param> 71         /// <param name="strparams">可變參數</param> 72         public int Up(Tclass model, params string[] strparams) 73         { 74             //關閉檢查 75             db.Configuration.ValidateOnSaveEnabled = false; 76             //附加到上下文 77             var m = db.Entry<Tclass>(model); 78             //把全部屬性標記為 沒有修改 79             m.State = System.Data.Entity.EntityState.Unchanged; 80             for (int i = 0; i < strparams.Length; i++) 81             { 82                 //標記要修改的屬性 83                 m.Property(strparams[i]).IsModified = true; 84             } 85             int num = db.SaveChanges(); 86             //打開檢查 87             db.Configuration.ValidateOnSaveEnabled = true; 88             return num; 89         } 90         #endregion 91  92         #region 3.1 修改方法2 根據條件 修改指定的 屬性 值 +Up(Expression<Func<Tclass, bool>> upWhere, Tclass model, params string[] strparame) 93         /// <summary> 94         /// 3.1 修改方法2 根據條件 修改指定的 屬性 值 95         /// </summary> 96         /// <param name="upWhere"></param> 97         /// <param name="model"></param> 98         /// <param name="strparame"></param> 99         public void Up(Expression<Func<Tclass, bool>> upWhere, Tclass model, params string[] strparame)100         {101             //查詢出滿足條件的所有實體102             var modelS = db.Set<Tclass>().Where(upWhere).ToList();103             //利用反射 獲取 類 對象 的所有公共 屬性 默認是[GetProperties(BindingFlags.Instance | BindingFlags.Public)]104             var listPro = typeof(Tclass).GetProperties().ToList();105             // 屬性對象 鍵值對106             List<PropertyInfo> dic = new List<PropertyInfo>();107             listPro.ForEach(l =>108             {109                 for (int i = 0; i < strparame.Length; i++)110                 {111                     //循環 判斷 添加 需要修改的 屬性對象112                     if (l.Name == strparame[i].Trim())113                     {114                         dic.Add(l);115                         break;116                     }117                 }118             });119 120             if (dic.Count > 0)//判斷 屬性對象集合  是否 有 數據121             {122                 foreach (var property in dic)123                 {124                     //取 傳過來的對象 里面的值125                     var newValue = property.GetValue(model);126                     foreach (var mymodel in modelS)127                     {128                         //修改到 對象集合129                         property.SetValue(mymodel, newValue);130                     }131                 }132             }133         }134         #endregion135 136         #region  4.0 查詢方法 +GetList<Tkey>(Expression<Func<Tclass, bool>> strWhere, Expression<Func<Tclass, Tkey>> strOrederBy = null, bool order = true)137         /// <summary>138         /// 4.0 查詢方法 139         /// </summary>140         /// <typeparam name="Tkey"></typeparam>141         /// <param name="strWhere">查詢條件</param>142         /// <param name="strOrederBy">排序條件</param>143         /// <param name="order">是否升序</param>144         /// <returns></returns>145         public List<Tclass> GetList<Tkey>(Expression<Func<Tclass, bool>> strWhere, Expression<Func<Tclass, Tkey>> strOrederBy = null, bool order = true)146         {147             var t = db.Set<Tclass>().Where(strWhere);148             if (strOrederBy != null)149             {150                 if (order)151                     t = t.OrderBy(strOrederBy);152                 else153                     t = t.OrderByDescending(strOrederBy);154             }155             return t.ToList();156         }157         #endregion158 159         #region 4.1 查詢方法2 分頁查詢 +GetList<Tkey>(int indexPage, int sizePage, Expression<Func<Tclass, bool>> strWhere, Expression<Func<Tclass, Tkey>> strOrederBy = null, bool order = true)160         /// <summary>161         /// 4.1 查詢方法2 分頁查詢162         /// </summary>163         /// <typeparam name="Tkey"></typeparam>164         /// <param name="indexPage">頁碼</param>165         /// <param name="sizePage">頁容量</param>166         /// <param name="strWhere">查詢條件</param>167         /// <param name="strOrederBy">排序字段</param>168         /// <param name="order">是否升序</param>169         /// <returns></returns>170         public List<Tclass> GetList<Tkey>(int indexPage, int sizePage, Expression<Func<Tclass, bool>> strWhere, Expression<Func<Tclass, Tkey>> strOrederBy = null, bool order = true)171         {172             var t = db.Set<Tclass>().Where(strWhere);173             if (strOrederBy != null)174             {175                 if (order)176                     t = t.OrderBy(strOrederBy);177                 else178                     t = t.OrderByDescending(strOrederBy);179             }180             return t.Skip((indexPage - 1) * sizePage).Take(sizePage).ToList();181         }182         #endregion183 184         #region 提交 +save()185         /// <summary>186         /// 提交187         /// </summary>188         /// <returns></returns>189         public int save()190         {191             return db.SaveChanges();192         }193         #endregion194     }195 }
View Code

 

 

說明:此類文章僅供本人學習記錄使用。如有2B的錯誤,歡迎指出。不喜勿噴!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品福利在线观看| 欧美孕妇孕交黑巨大网站| www国产精品视频| 日韩一区二区在线视频| 国产精品亚洲综合天堂夜夜| 日韩精品视频在线观看网址| 亚洲成成品网站| 欧美最近摘花xxxx摘花| 日韩av影院在线观看| 色噜噜亚洲精品中文字幕| 欧美亚洲国产另类| 欧美激情久久久久久| 久久精品国产一区二区三区| 日韩av免费在线看| 国内精品久久久久影院 日本资源| 亚洲欧美中文字幕| 热re91久久精品国99热蜜臀| 欧美日韩成人黄色| 国产精品日韩在线观看| 日韩免费在线视频| 97视频免费在线看| 97久久超碰福利国产精品…| 亚洲香蕉av在线一区二区三区| 欧美激情2020午夜免费观看| 亚洲黄色在线观看| 日韩高清有码在线| 精品成人69xx.xyz| 欧美日韩成人免费| 国产精品专区一| 久久久免费观看| 亚洲精品网址在线观看| 在线免费观看羞羞视频一区二区| 亚洲欧美自拍一区| 97**国产露脸精品国产| 日韩av一区二区在线| 久久免费在线观看| 色妞久久福利网| 51ⅴ精品国产91久久久久久| 中文字幕欧美日韩在线| 97精品视频在线| 国产主播在线一区| 欧美高清在线视频观看不卡| 日韩精品视频在线观看免费| 国产美女被下药99| 亚洲天堂精品在线| 精品国产精品三级精品av网址| 69av成年福利视频| 国产热re99久久6国产精品| 亚洲美女性生活视频| 97免费中文视频在线观看| 91成人天堂久久成人| 成人免费激情视频| 米奇精品一区二区三区在线观看| 精品美女永久免费视频| 一区二区三区国产在线观看| 秋霞av国产精品一区| 国产成人aa精品一区在线播放| 成人在线激情视频| 一区二区三区四区视频| 久久欧美在线电影| 亚洲人永久免费| 日韩视频在线观看免费| 久久99久国产精品黄毛片入口| 欧美亚州一区二区三区| 国产成人精品av| 九九热这里只有精品6| 91高清视频免费| 日韩免费观看网站| 九九热这里只有精品免费看| 中文字幕日本精品| 国产精品欧美激情在线播放| 欧美性生交大片免费| 欧洲s码亚洲m码精品一区| 中文字幕精品在线| 国产91精品久| 国产精品一区二区三| 欧美在线视频一区二区| 黑人巨大精品欧美一区二区三区| 欧美午夜无遮挡| 久久久www成人免费精品张筱雨| 欧美在线性爱视频| 日韩中文有码在线视频| 精品国产福利视频| 中文字幕亚洲第一| 欧美国产精品va在线观看| 亚洲福利在线视频| 欧美午夜精品久久久久久浪潮| 亚洲午夜久久久影院| 欧美精品久久久久| 一二美女精品欧洲| 68精品久久久久久欧美| 亚洲一区二区三区久久| 欧美在线视频a| 国产精品美女www爽爽爽视频| 成人精品视频99在线观看免费| 亚洲专区在线视频| 久久久亚洲福利精品午夜| 久久久久久久影院| 欧美成人在线网站| 91久久精品美女高潮| 久久国产精品久久精品| 久久久久久久av| 国产拍精品一二三| 91精品国产乱码久久久久久久久| 亚洲韩国日本中文字幕| 国产精品久久久久9999| 国产精品jvid在线观看蜜臀| 欧美成人激情在线| 日本不卡视频在线播放| 久久久久久久97| 国产精品96久久久久久又黄又硬| 另类专区欧美制服同性| 日韩中文字幕免费视频| 中文字幕欧美日韩va免费视频| 欧美裸体xxxx极品少妇软件| 久久久精品免费| 国内成人精品视频| 精品香蕉在线观看视频一| 欧美精品在线看| 日韩欧美在线视频观看| 综合网中文字幕| 国产成人+综合亚洲+天堂| 国产精品白丝av嫩草影院| 日韩av电影手机在线| 午夜伦理精品一区| 亚洲qvod图片区电影| 日韩欧美精品免费在线| 日韩中文字在线| 亚洲精品中文字幕有码专区| 国产精品∨欧美精品v日韩精品| 欧美精品在线极品| 91精品久久久久久久久青青| 日韩精品亚洲元码| 欧美丝袜美女中出在线| 欧美日韩国产精品一区二区三区四区| 韩剧1988免费观看全集| 国模吧一区二区三区| 国产成人精品综合久久久| 91亚洲人电影| 97精品国产91久久久久久| 国产成人综合精品| 欧美在线观看www| 国产视频精品xxxx| 成人午夜激情网| 欧美在线亚洲一区| 日韩精品免费看| 亚洲欧美在线第一页| 26uuu另类亚洲欧美日本一| 欧美日韩人人澡狠狠躁视频| 日韩欧美精品网站| 夜夜嗨av色综合久久久综合网| 亚洲欧美国产精品专区久久| 精品久久久999| 国产一区二区三区在线观看视频| 日韩欧美精品中文字幕| 日韩欧美在线第一页| 日韩美女视频中文字幕| 亚洲精品v天堂中文字幕| 九九综合九九综合| 日韩视频精品在线| 国产日韩精品在线播放| 亚洲精品中文字幕女同| 中文字幕欧美视频在线| 亚洲欧美综合图区|