日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

[.NET源码] EF的增删改查

發布時間:2024/10/12 asp.net 114 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [.NET源码] EF的增删改查 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  EF的增刪改查

  創建上下文對象:WordBoradEntities db = new WordBoradEntities();

  一、添加:

  //1.1創建實體對象

  User uObj = new User()

  {

  uName = "劉德華",

  uLoginName = "aaa",

  uPwd = "asdfasdfasdfsadf",

  uIsDel = false,

  uAddtime = DateTime.Now

  };

  //1.2通過EF新增到數據庫

  //1.2.1將對象加入到數據上下文的 User集合中

  db.Users.Add(uObj);

  //1.2.2調用數據上下文的保存方法,將對象存數數據庫

  db.SaveChanges();

  二、查詢:

  1、單行 var userLogin = db.T_UserLogin.Where(d => d.LoginID == loginID).FirstOrDefault();

  2、多行

  1)var list = db.Users.Where(u => u.uName == "劉德華").ToList();

  2)List list = db.Users.Where(u => u.uName == "劉德華").ToList();

  3、連接查詢:

  1)linq連接查詢: from a in db.User join b in db. UsersAddresses on a.Id equals b.udid

  2)EF連接查詢:IQueryable addrs = db.User.Include("UsersAddresses").Where(a => a.Id == 1);

  3)另一種連接查詢:var list=db.User.Join(db. UsersAddresses,c=>c.Id,g=>g.udid,(c,g)=>new{Name=c.Name,GroupName=g.GroupName});

  三、刪除:

  EF中實現刪除有三種方式,版本一、二都是根據主鍵刪除,版本三是根據任意條件到數據庫查詢然后再根據查詢的結果進行刪除,實際上版本三也是根據查詢出來的結果中的主鍵進行刪除。

  1 :根據主鍵刪除

  //實例化一個Users對象,并指定Id的值

  Users user = new Users() { Id = 1 };

  //將user附加到上下文對象中,并獲得EF容器的管理對象

  var entry = db.Entry(user);或者 var entry=db.Entry(user);

  //設置該對象的狀態為刪除

  entry.State = EntityState.Deleted;

  //保存修改

  db.SaveChanges();

  Console.WriteLine("刪除成功!");

  2:根據主鍵刪除

  //實例化一個Users對象,并指定Id的值

  Users user = new Users() { Id = 1 };

  //將user附加到上下文對象中

  db.Users.Attach(user);

  //刪除user對象

  Db.Users.Remove(user);

  //保存修改

  db.SaveChanges();

  Console.WriteLine("刪除成功!");

  3:根據條件先查詢出來然后再刪除

  var list= db.Users.Where(u => u.Name ==”張三”);

  if(list!=null&&list.Any())

  {

  Foreach(User item in list)

  {

  db.User.Remove(item);

  }

  }

  db.SaveChanges();

  四、修改:

  1.官方推薦的修改方式(先查詢,再修改)

  //將Id為2的Users數據取出

  var user = db.Users.Where(u => u.Id == 2).FirstOrDefault();

  Console.WriteLine("修改之前:" + user.UserName);

  //修改UserName屬性

  user.UserName = "222222222222222";

  //保存修改

  db.SaveChanges();

  Console.WriteLine("修改之后:" + user.UserName);

  2.自己優化的修改方式

  //1)創建出一個要修改的對象

  User use = new User() { uId = 8,uName="小白~~~"};

  //2)將對象加入 EF容器,并獲取當前實體對象的狀態管理對象

  DbEntityEntry entry = db.Entry(user);

  //3)設置該對象為未被修改過

  entry.State = System.Data.EntityState.Unchanged;

  //4)設置該對象的 uName屬性為修改狀態,同時 entry.State 被修改為 Modified 狀態

  entry.Property("uName").IsModified = true;

  //5)關閉EF實體合法性檢查(如果創建出來的要修改的數據有的字段沒有賦值則關閉實體合法性檢查,如果所有字段都賦值了則不用關閉EF實體合法性檢查)

  db.Configuration.ValidateOnSaveEnabled = false;

  //6)重新保存到數據庫 -- ef 上下文會根據實體對象的狀態,根據 entry.State =Modified 的值生成對應的 update sql 語句.

  db.SaveChanges();

  Console.WriteLine("修改成功:");

  五、增刪改查的另一種方式,純sql。

  當遇到復雜的需求,需要書寫復雜語句,但有不特別熟悉EF語法時有兩種方案:

  1.數據庫中創建視圖;

  2純sql方式;

  //1)查詢SqlQuery

  result.slList = db.Database.SqlQuery("select Precision,Year,LandCover, sum(Area) as Area from [EcoTypes] where LandCover=@type group by Precision, Year, LandCover", new SqlParameter("@type", "森林")).Select(d=> d.Area).ToList();

  //2)增刪改:ExecuteSqlCommand

  db.Database.ExecuteSqlCommand("").ToString();

  詳情請db.Database. 此時會出現所有方式和相應的說明文字。

  注釋: db是視圖對象模型。

  EcologyEntities db = new EcologyEntities();

  六、當以上方法都不能滿足是,大不了寫點原生ADO代碼,一個項目兩種ORM也是可以的,只要能解決復雜問題。

  (編輯:雷林鵬 來源:網絡)

轉載于:https://www.cnblogs.com/pengpeng1208/p/9143870.html

總結

以上是生活随笔為你收集整理的[.NET源码] EF的增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。