欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Entity?Framework根據(jù)實體的EntityState狀態(tài)實現(xiàn)增刪改查

 更新時間:2022年03月09日 08:55:49   作者:.NET開發(fā)菜鳥  
這篇文章介紹了Entity?Framework根據(jù)實體的EntityState狀態(tài)實現(xiàn)增刪改查,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

上一篇文章中,我們講解了使用EF實現(xiàn)簡單的增刪改查,在這篇文章中我們使用實體的EntityState狀態(tài)來優(yōu)化數(shù)據(jù)的增刪改查。

一、修改數(shù)據(jù)

上篇文章中的修改數(shù)據(jù)的方法是EF官方推薦的方式,即先查詢出來要修改的數(shù)據(jù),然后在修改。但是這種操作會導(dǎo)致多次操作數(shù)據(jù)庫:

從上面的截圖中可以看出,查詢數(shù)據(jù)的時候會執(zhí)行一次事物,修改的時候又執(zhí)行了一次事物,即修改數(shù)據(jù)會操作兩次數(shù)據(jù)庫。那么有沒有什么方法可以只操作一次數(shù)據(jù)庫呢?那就是下面要講解的EntityState。

使用EntityState優(yōu)化上面的修改方法:

static void EditAdvance()
{
     using (StudentSystemEntities dbContext = new StudentSystemEntities())
      {
           // 將EF執(zhí)行的SQL語句輸出到控制臺
           dbContext.Database.Log += p => Console.WriteLine(p);
           // 創(chuàng)建要修改的對象
           Student stu = new Student()
           {
                 StudentID = 14,
                 Age = 690
            };
            // 通過上下文獲取對象相關(guān)信息
            DbEntityEntry<Student> entry = dbContext.Entry<Student>(stu);
            // 對象的狀態(tài)是沒有修改
            entry.State = System.Data.Entity.EntityState.Unchanged;
            // 對象的屬性值A(chǔ)ge修改了
            entry.Property("Age").IsModified = true;
            // 保存修改 會智能判斷哪個對象的哪個屬性值修改了
            dbContext.SaveChanges();
            Console.WriteLine("修改成功");
     }
}

結(jié)果:

從上面的截圖中不難看出,這次只操作了一次數(shù)據(jù)庫。

好處:只執(zhí)行一次數(shù)據(jù)庫操作,不需要查詢了,體現(xiàn)了EF修改的本質(zhì)(通過實體對象的狀態(tài)進(jìn)行修改)。

二、刪除

static void DeleteAdvance()
{
     using (StudentSystemEntities dbContext = new StudentSystemEntities())
     {
         // 將EF執(zhí)行的SQL語句輸出到控制臺
         dbContext.Database.Log += p => Console.WriteLine(p);
         // 先查詢?nèi)缓笤趧h除
         Student stu = new Student()
         {
               StudentID = 14
          };
          DbEntityEntry<Student> entry = dbContext.Entry<Student>(stu);
          entry.State = System.Data.Entity.EntityState.Deleted;
          // 保存,智能判斷對象的狀態(tài)
          dbContext.SaveChanges();
          Console.WriteLine("刪除成功");
      }
}

結(jié)果:

三、新增數(shù)據(jù)

static void AddAdvance()
{
     using (StudentSystemEntities dbContext = new StudentSystemEntities())
      {
          // 定義Student對象
          Student stu = new Student()
          {
               StudentName = "花千骨",
               Sex = "女",
               Age = 3422,
               Major = "舞蹈專業(yè)",
               Email = "2345678911@qq.com"
           };
           // 將EF執(zhí)行的SQL語句輸出到控制臺
           dbContext.Database.Log += p => Console.WriteLine(p);
           DbEntityEntry<Student> entry = dbContext.Entry<Student>(stu);
           entry.State = System.Data.Entity.EntityState.Added;
            // 保存的數(shù)據(jù)庫
            dbContext.SaveChanges();
            Console.WriteLine("保存成功");
      }
}

四、批處理

利用EntityState可以很好的實現(xiàn)批處理功能,例如下面的例子:增加兩條數(shù)據(jù),修改一條數(shù)據(jù),刪除一條數(shù)據(jù)

static void Save()
{
      using (StudentSystemEntities dbContext = new StudentSystemEntities())
      {
           // 將EF執(zhí)行的SQL語句輸出到控制臺
           dbContext.Database.Log += p => Console.WriteLine(p);
           // 新增數(shù)據(jù)1
           Student stu1 = new Student()
           {
               StudentName = "紅孩兒",
               Age = 456,
               Major = "冶金專業(yè)"
            };
            dbContext.Students.Add(stu1);

            // 新增數(shù)據(jù)2
            Student stu2 = new Student()
            {
                StudentName = "青牛精",
                Age = 345,
                Major = "煉丹"
             };
             // 使用狀態(tài)
             DbEntityEntry<Student> entry = dbContext.Entry<Student>(stu2);
              entry.State = System.Data.Entity.EntityState.Added;

              // 修改數(shù)據(jù)
              Student stuEdit = new Student()
              {
                    StudentID=5,
                    Age=678
              };
              //狀態(tài)
              DbEntityEntry<Student> entryEdit = dbContext.Entry<Student>(stuEdit);
              entryEdit.State = System.Data.Entity.EntityState.Unchanged;
              entryEdit.Property("Age").IsModified = true;

              // 刪除數(shù)據(jù)
              Student stuDel = new Student()
              {
                   StudentID=22
              };
              DbEntityEntry<Student> entryDel = dbContext.Entry<Student>(stuDel);
              entryDel.State = System.Data.Entity.EntityState.Deleted;

              // 保存
              dbContext.SaveChanges();
              Console.WriteLine("保存成功");
      }
}

使用EntityState實現(xiàn)批處理功能,只需要執(zhí)行一次SaveChange()就可以了,如果是使用原來的方式就需要多次執(zhí)行SaveChange(),這樣可以減少數(shù)據(jù)庫的操作。

總結(jié):無論是add、remove、savechanges都是根據(jù)EF包裝實體的State進(jìn)行相應(yīng)的增刪改操作。

以上所述是小編給大家介紹的Entity Framework根據(jù)實體的EntityState狀態(tài)實現(xiàn)增刪改查,希望對大家有所幫助。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 基于?.NET?6?的ASP.NET?Core啟動地址配置方法及優(yōu)先級順序

    基于?.NET?6?的ASP.NET?Core啟動地址配置方法及優(yōu)先級順序

    這篇文章主要介紹了ASP.NET?Core啟動地址配置方法及優(yōu)先級順序,?.NET?6?使用了最小?WEB?API,?配置方式已經(jīng)部分發(fā)生了變化,下面文章我們來看看具體的方法,需要的小伙伴可以參考一下
    2022-03-03
  • .Net彈性和瞬態(tài)故障處理庫Polly實現(xiàn)執(zhí)行策略

    .Net彈性和瞬態(tài)故障處理庫Polly實現(xiàn)執(zhí)行策略

    這篇文章介紹了.Net彈性和瞬態(tài)故障處理庫Polly實現(xiàn)執(zhí)行策略的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • .NetCore之接口緩存的實現(xiàn)示例

    .NetCore之接口緩存的實現(xiàn)示例

    這篇文章主要介紹了.NetCore之接口緩存的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • asp.net AJAX注冊類

    asp.net AJAX注冊類

    單純用JavaScript,不需要注冊,但是就是用不了AJAX的某些機制。
    2010-02-02
  • Asp.net Core 如何設(shè)置黑白名單(路由限制)

    Asp.net Core 如何設(shè)置黑白名單(路由限制)

    本文主要介紹了Asp.net Core 如何設(shè)置黑白名單(路由限制),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • NetCore 3.0文件上傳和大文件上傳的限制詳解

    NetCore 3.0文件上傳和大文件上傳的限制詳解

    這篇文章主要給大家介紹了關(guān)于NetCore 3.0文件上傳和大文件上傳限制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用NetCore 3.0具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 在?.NET?中使用?FixedTimeEquals?應(yīng)對計時攻擊的例子

    在?.NET?中使用?FixedTimeEquals?應(yīng)對計時攻擊的例子

    在計算機安全中,計時攻擊(Timing attack)是旁道攻擊 (Side-channel attack) 的一種,而旁道攻擊是根據(jù)計算機處理過程發(fā)出的信息進(jìn)行分析,這篇文章主要介紹了在?.NET?中使用?FixedTimeEquals?應(yīng)對計時攻擊,需要的朋友可以參考下
    2022-06-06
  • DotNetCore深入了解之HttpClientFactory類詳解

    DotNetCore深入了解之HttpClientFactory類詳解

    這篇文章主要給大家介紹了關(guān)于DotNetCore深入了解之HttpClientFactory類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • asp.net用url重寫URLReWriter實現(xiàn)任意二級域名 新

    asp.net用url重寫URLReWriter實現(xiàn)任意二級域名 新

    最近有個朋友要做url重寫的東西,我?guī)退伺?回頭看當(dāng)年自己寫的那個文章,當(dāng)時以為自己寫的很容易理解.但現(xiàn)在再看卻覺得寫的不好.而今天百度了一下urlrewriter發(fā)現(xiàn)我這個文章竟然排第二.為了方便更多朋友,我再寫點東西補充下.
    2009-11-11
  • 為TextBox裝飾水印與(blur和focus)事件應(yīng)用

    為TextBox裝飾水印與(blur和focus)事件應(yīng)用

    為了界面的美觀,有些時候可能需要為文本框(TextBox)裝飾個水?。凰袃煞N狀態(tài),一是blur和focus。因此,我們可以在Javascript寫兩個事件,感興趣的朋友可以了解下
    2013-01-01

最新評論