最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年03月09日 08:55:49   作者:.NET開發(fā)菜鳥  
這篇文章介紹了Entity?Framework根據(jù)實體的EntityState狀態(tài)實現(xiàn)增刪改查,文中通過示例代碼介紹的非常詳細。對大家的學(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)進行修改)。

二、刪除

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進行相應(yīng)的增刪改操作。

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

相關(guān)文章

  • asp.net6?blazor?文件上傳功能

    asp.net6?blazor?文件上傳功能

    這篇文章主要介紹了asp.net6?blazor?文件上傳,我們今天的所有內(nèi)容,都要依賴這個接口,因為它可以把流直接傳到c#中,這樣我們就可以做很多的騷操作了,需要的朋友可以參考下
    2022-05-05
  • asp.net 轉(zhuǎn)換人民幣大小金額

    asp.net 轉(zhuǎn)換人民幣大小金額

    轉(zhuǎn)換人民幣大小金額的一個通用類。
    2009-09-09
  • ASP.NET防止SQL注入的方法示例

    ASP.NET防止SQL注入的方法示例

    這篇文章主要介紹了ASP.NET防止SQL注入的方法,結(jié)合具體實例形式分析了asp.net基于字符串過濾實現(xiàn)防止SQL注入的相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03
  • ASP.NET?Core中間件實現(xiàn)限流的代碼

    ASP.NET?Core中間件實現(xiàn)限流的代碼

    這篇文章主要介紹了ASP.NET?Core中間件實現(xiàn)限流的方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • WPF使用Grid網(wǎng)格面板布局

    WPF使用Grid網(wǎng)格面板布局

    這篇文章介紹了WPF使用Grid網(wǎng)格面板布局的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • RabbitMQ .NET消息隊列使用詳解

    RabbitMQ .NET消息隊列使用詳解

    這篇文章主要為大家詳細介紹了RabbitMQ .NET消息隊列使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Asp.NET頁面中事件加載的先后順序詳解

    Asp.NET頁面中事件加載的先后順序詳解

    這篇文章主要給大家介紹了關(guān)于Asp.NET頁面中事件加載的先后順序,文中通過圖文以及示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • asp.net 包含文件的方法

    asp.net 包含文件的方法

    ASP.NET文件包含的方法基本與ASP文件包含差不多!
    2010-03-03
  • asp.net checkbox 動態(tài)綁定id GridView刪除提示

    asp.net checkbox 動態(tài)綁定id GridView刪除提示

    asp.net checkbox 動態(tài)綁定id,需要的朋友可以參考下。雖然簡單但不知道挺麻煩的。GridView刪除提示
    2009-10-10
  • .NET或.NET Core Web APi基于tus協(xié)議實現(xiàn)斷點續(xù)傳的示例

    .NET或.NET Core Web APi基于tus協(xié)議實現(xiàn)斷點續(xù)傳的示例

    這篇文章主要介紹了.NET或.NET Core Web APi基于tus協(xié)議實現(xiàn)斷點續(xù)傳的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論

临邑县| 桑日县| 焦作市| 突泉县| 石景山区| 稻城县| 阜城县| 云和县| 米脂县| 新绛县| 乌兰浩特市| 项城市| 东兰县| 新邵县| 全州县| 大埔县| 平舆县| 杭州市| 万安县| 封丘县| 安吉县| 临朐县| 仙居县| 景谷| 遂宁市| 庄浪县| 嘉峪关市| 甘肃省| 来凤县| 呼伦贝尔市| 沂南县| 台北县| 台前县| 剑河县| 东山县| 清苑县| 平湖市| 常德市| 正安县| 黎城县| 桓台县|