EF的增刪改查(轉載)

来源:https://www.cnblogs.com/hao-1234-1234/archive/2018/04/09/8760985.html
-Advertisement-
Play Games

EF的增刪改查 創建上下文對象:WordBoradEntities db = new WordBoradEntities(); 一、添加: //1.1創建實體對象 User uObj = new User() { uName = "劉德華", uLoginName = "aaa", uPwd = " ...


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<User> 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<UsersAddress> 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>(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.官方推薦的修改方式(先查詢,再修改)

//Id2Users數據取出

      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<User> entry = db.Entry<User>(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<DataTemp>("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/zhuyuchao/p/5634196.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 多態是C++的三大法器之一,此處我們用C模擬多態,加深對C++的多態的理解 ...
  • 聲明:以下轉載自:Java中的File文件類詳解 文件操作在Java的io操作中占有十分重要的地位,本文從以下幾個方面來接受Java中對文件的操作。 1.Java中新建或者刪除一個文件,文件夾以及createNewFile(),delete(),mkdir(),mkdirs()函數的使用。 2. 判 ...
  • using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ConsoleApplication2{ class P ...
  • 註意:無論那種方法,都要先設置Tab控制項的Style屬性為fixed width.第一種方法MFC,tabcontrol控制項改變標簽大小 - CSDN博客 https://blog.csdn.net/u012702039/article/details/22668161CSize size, siz... ...
  • using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ConsoleApplication1 { class ...
  • 用C#(.NET Core) 實現簡單工廠(簡單工廠不是設計模式)和工廠方法模式 ...
  • 問題描述 在很多系統中,存在多對多關係的維護。如下圖: 這種結構大部分有三個數據表,其中兩個具有主鍵的表,還有一個具有兩個鍵的關聯表,這個表中的兩個欄位既是主鍵又是外鍵。 如上圖,其中的Supplier表和Product是主業務表,ProductSupplier是關聯關係表,如果處理過一些複雜的業務... ...
  • 概述 UWP Community Toolkit Extensions 中有一個為FrameworkElement 提供的擴展 - FrameworkElement Extensions,本篇我們結合代碼詳細講解 FrameworkElement Extensions 的實現。 FrameworkE ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...