EF操作 使用實體刪除資料庫的使用者資訊

2022-09-10 18:03:18 字數 3353 閱讀 4187

這種方法比較簡單,直接使用ef模型的實體執行database.executesqlcommand命令即可,而且貌似也不用查詢,直接讓實體執行運算元據庫的命令即可,效率也快一點兒,雖然簡單,不過這種寫法一點都不洋氣,還是得看下面幾種先進的方法。

//例項化物件模型的例項

fhzmentities fhzmentities = new fhzmentities();

//根據sql語句來刪除資料

int count = fhzmentities.database.executesqlcommand("delete from userinfo where id=@id", new sqlparameter("@id", userinfoid));

這種方法會查詢一遍資料庫,也就是能知道資料庫裡是否有要刪除的紀錄,再把查詢到的資料呼叫實體來向資料庫執行刪除操作。這種寫法使用了lamdba表示式,也就是匿名函式,比寫sql語句方便,只是它會查詢資料庫,效率比直接用實體運算元據庫稍微慢一點點。

//例項化實體

fhzmentities fhzmentities = new fhzmentities();

//先查詢出此條資訊

userinfo userinfo = fhzmentities.userinfo.where(a => a.id == userinfoid).firstordefault();

//判斷此使用者資訊是否存在,進入這個判斷表示使用者是通過非正常流程提交的,因為資料庫裡的資料對應著前台的資料,

//而且是通過post提交的,只有資料庫裡沒有該資料時才會為空,不用友好提示,因為這是惡意提交的

if (userinfo == null)

//將狀態新增到實體中

fhzmentities.userinfo.remove(userinfo);

//把修改請求提交到資料庫

int count = fhzmentities.s**echanges();

使用這種方法想要查詢出多個使用者物件,然後一次刪除也是可以做到的,只需要在實體呼叫運算元據庫的方法之前將這些多個使用者物件都新增到實體的狀態即可,如下圖就是在實體執行運算元據庫的方法之前將多個查出來的使用者物件都新增到實體的狀態裡,然後呼叫一次運算元據庫的方法即可:

也可以像下圖一樣,像實體中新增乙個狀態就讓實體執行一次運算元據庫的方法,這樣就能更實時的刪除了,只不過這樣效率要慢些:

這種方法效率比上一種方法快,因為它不查詢,而是直接用實體運算元據庫

//例項化實體

fhzmentities fhzmentities = new fhzmentities();

//從實體裡例項化物件資訊,可以例項化多個物件,並把這些物件都通過下面兩種方式新增到實體的狀態中

userinfo userinfotodelete = new userinfo() ;

////修改狀態方式1

////給實體新增乙個修改狀態,這種寫法不用呼叫remove將狀態新增到實體中,因為它內部也是呼叫了remove方法

//修改狀態方式2:先借助attch方法把新物件放入上下文物件中,在通過remow將狀態新增到實體中,這種方式貌似不能新增修改狀態

//給實體新增乙個刪除狀態,

fhzmentities.userinfo.attach(userinfotodelete);

////將狀態新增到實體中

fhzmentities.userinfo.remove(userinfotodelete);//remove是將狀態改為刪除並將狀態新增到實體,前提是物件必須給上下文跟蹤

//把修改請求提交到資料庫(使用這種方法可以批量刪除,就是給實體新增多個修改狀態,然後提交)

int count = fhzmentities.s**echanges();

這種方法有兩種把物件新增到實體狀態裡的上下文的方法,在上面**中也寫了的。

第一種:

這種貌似只能讓實體執行刪除操作的時候用,具體暫時不知道是不是這樣,暫時先這樣總結。

//修改狀態方式2:先借助attch方法把新物件放入上下文物件中,在通過remow將狀態新增到實體中,這種方式貌似不能新增修改狀態

//給實體新增乙個刪除狀態,

fhzmentities.userinfo.attach(userinfotodelete);

////將狀態新增到實體中

fhzmentities.userinfo.remove(userinfotodelete);//remove是將狀態改為刪除並將狀態新增到實體,前提是物件必須給上下文跟蹤

第二種

這種本質上也是利用了第一種方法,就像是第一種的簡寫一樣,不過這樣寫能直接指定實體執行刪除或者修改等操作。

//修改狀態方式2

//給實體新增乙個修改狀態,這種寫法不用呼叫remove將狀態新增到實體中,直接在後面寫deleted狀態即可,因為它內部也是呼叫了remove方法

如上圖:選擇多個使用者資訊後,點選刪除,實現批量刪除,思路:

拿到要被刪除的所有行,也就是要被刪除的所有使用者,把使用者的id全部用字串拼接好,最後將這個字串傳到控制器,控制器解析後呼叫ef刪除即可。

第一步:拿到**裡所有別選中的行的id,然後定義乙個字串來接受選中的id,累加到字串中,逗號隔開。

第二步,傳到控制器裡,什麼方式傳也行,location.herf也行,這裡我們用的非同步,ajax來傳需要刪除的id,

第三步,後台控制器解析並使用ef呼叫即可。

最後,使用ajax的話,只需要在**函式裡用js來將前台**裡的行刪除即可,不用非同步的話直接在控制器的最後重新訪問這個頁面的控制器即可。

使用drop database刪除資料庫

環境 db 10.2.0.1 以前刪除資料庫的通常方法有兩種,一種是使用dbca刪除資料庫,另外一種是停掉資料庫後刪除該資料庫的相應目錄.最近發現有一種方法比較直接,就是使用drop database.sql startup mount exclusive 資料庫必須在mount exclusive...

使用EF操作不同資料庫

最近一直在和 資料庫作對。從安卓平台上給了我個sqlite資料庫,要求程式能夠讀取不同的檔案。由於字段實在太多,不願意直接使用原來直接讀取datatable的方式來做,手動寫對映太痛苦.於是想起來ef來。web.config中寫入connectionstring,操作乙個資料庫的時候挺好,但是如果要...

幾種刪除資料庫操作的比較

truncate table 在功能上與不帶 where子句的 delete 語句相同 二者均刪除表中的全部行。但 truncate table 比delete速度快,且使用的系統和事務日誌資源少。delete語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。truncatetable通過釋放...