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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...