日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

EF 的Attach方法

發布時間:2023/12/15 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 EF 的Attach方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在介紹Attach方法前先介紹與它相關的知識點

Attach方法:將給定實體以 System.Data.EntityState.Unchanged 狀態附加到上下文中

從解釋可以看出Attach方法主要目的就是把一個沒有被dbContext跟蹤的對象附加到dbCotext中使其被dbContext跟蹤

1 對象上下文:DBContext 建一個新的上下文實例以創建將連接到的數據庫的名稱,默認狀態是沒有對任何對象跟蹤的

2 實體狀態:在EF中對實體狀會有4種狀態:

2.1Added:對象為新對象,并且已添加到對象上下文,但尚未調用

  2.2Deleted:對象已從對象上下文中刪除

  2.3 Detached:對象存在,但沒有被跟蹤。 在創建實體之后、但將其添加到對象上下文之前,該實體處于此狀態

  2.4 Modified:對象上的一個標量屬性已更改,但尚未調用

  2.5 Unchanged: 此對象尚未經過修改自對象附加到上下文中后,或自上次調用 (調用了SaveChange方法后所有的對象都改為Unchanged狀態)

了解了相關的知識后就開始利用Attach方法改代碼了

以上為原來的方法

復制代碼
using(Entities ctx = new Entities())
{
Product product = ctx.Product.First();
//更新屬性操作
ctx.SaveChange();
  
}
復制代碼
這種寫法會產生兩次對數據庫的操作,改成Attach方法后如下

復制代碼
public void Update(Product product)
{

using(Entities ctx = new Entities)
{
//product 已前臺更新后
ctx.Attach(product);
ctx.ObjectStateManager.ChangeObjectState(entity,EntityState.Modified)
ctx.SaveChange();
}
}
//EF 的處理方式如下
// 1 把對象附加到上下文中,并把狀態改為Modified狀態
// 2 調用Savechange方法時生成一段Update的SQL語句且Where 條件
// 為對象的主鍵Id,因為EF更新和刪除都是根據主鍵ID來處理的
復制代碼
刪除操作也是一樣的,這里就只貼用Attach的處理方式了

復制代碼
public void Delete(Product product)
{

using(Entities ctx = new Entities)
{
Productentity = new Product{Id =1}
ctx.Attach(entity); ctx.ObjectStateManager.ChangeObjectState(entity,EntityState.Deleted)
ctx.SaveChange();
}
}
//前面說了EF是根據主鍵ID來處理的所以只要手動生成一個對象并把對應的ID賦值然后Attach到上下文中即可做到刪除
復制代碼

相比項目中原來的方法,用Attach后對數據庫的操作相應減少一次,性能上會有較大提升!

總結

以上是生活随笔為你收集整理的EF 的Attach方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。