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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查

發布時間:2024/4/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【EF學習筆記09】----------使用 EntityState 枚舉標記實體狀態,實現增刪改查

講解之前,先來看一下我們的數據庫結構:班級表 學生表

如上圖,實體狀態由EntityState枚舉定義:Detached(未跟蹤)、Unchanged(未改變)、Added(已添加)、Deleted(已刪除)、Modified(已修改)

查看實體狀態

//查看實體狀態 using (var db = new Entities()) {var query = db.Student.First();Console.WriteLine(db.Entry(query).State);//輸出Unchanged }

執行結果:

說明:輸出結果 Unchanged ,已加載到上下文中的實體為Unchanged狀態。

標記實體狀態

Console.WriteLine("==========標記狀態 EntityState.Unchanged===========");Student student; using (var db = new Entities()) {student = db.Student.Where(s => s.StudentName == "張三").First(); }//查看實體狀態 using (var db = new Entities()) {Console.WriteLine(db.Entry(student).State);//輸出Detached db.Student.Attach(student);//將實體附加到上下文中Console.WriteLine(db.Entry(student).State);//輸出Unchanged db.SaveChanges();//未執行SQL語句 }

執行結果:

說明:上圖中student對象定義在上下文作用域之外,所以默認是Detached未跟蹤狀態。

調用Attach方法將對象附加到上下文中,狀態變為Unchanged。

Unchanged狀態為未改變,所以調用db.SaveChanges方法不執行SQL語句。

標記狀態 EntityState.Added

using (var db = new Entities()) {var classes = new Classes(){ClassName = "英語10501"};Console.WriteLine(db.Entry(classes).State);//輸出 Detached db.Entry(classes).State = System.Data.Entity.EntityState.Added;//修改狀態為Added//db.Classes.Add(classes); //調用DBSet.Add方法同樣的效果 Console.WriteLine(db.Entry(classes).State);//輸出 Added

db.SaveChanges();//更新到數據庫
}

執行結果:

說明:修改狀態調用Entry方法,由Detached-->Added。DBSet.Add方法同樣效果。

標記狀態 EntityState.Modified

方式一:更新指定字段

//方式一:更新部分字段 using (var db = new Entities()) {var student = db.Student.Where(s => s.StudentName == "張三").First();Console.WriteLine(db.Entry(student).State);//輸出Detached student.StudentName = "張三豐";Console.WriteLine(db.Entry(student).State);//輸出Modified db.SaveChanges(); }

追蹤SQL語句:

執行結果:

說明:根據生成的SQL語句可知,只更新了StudentName字段。未實體賦值將改變實體狀態 Unchanged-->Modified。

方式二:更新所有

using (var db = new Entities()) {var student = db.Student.Where(s => s.StudentName == "張三").First();Console.WriteLine(db.Entry(student).State);//輸出Detached db.Entry(student).State = System.Data.Entity.EntityState.Modified;student.StudentName = "張三豐";Console.WriteLine(db.Entry(student).State);//輸出Modified db.SaveChanges(); }

追蹤SQL語句:

執行結果:

說明:調用Entry方法改變實體狀態 Unchanged-->Modified,會生成更新所有字段的SQL。

student.StudentName = "張三豐";db.Entry(student).State = System.Data.Entity.EntityState.Modified;

這兩句順序顛倒,效果相同。

標記狀態 EntityState.Deleted

using (var db = new Entities()) {var student = db.Student.Where(n=>n.StudentName=="小芳").Single();Console.WriteLine(db.Entry(student).State);//輸出Unchanged db.Entry(student).State = System.Data.Entity.EntityState.Deleted;//db.Student.Remove(student); Console.WriteLine(db.Entry(student).State);//輸出Detached db.SaveChanges(); }

追蹤SQL語句:

執行結果對比:

說明:執行了2條SQL語句:實體狀態由Unchange---->Deleted,根據主鍵刪除。

如果刪除的記錄是其他實體的外鍵,則會報錯,無法刪除。

posted on 2016-08-09 17:48 思如雨 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/gosky/p/5754128.html

總結

以上是生活随笔為你收集整理的【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。

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