EF 的Attach方法

來源:互聯網
上載者:User

標籤:



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

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

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

1   物件內容:DBContext 建一個新的上下文執行個體以建立將串連到的資料庫的名稱,預設狀態是沒有對任何對象跟蹤的

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

      2.1  Added:對象為新對象,並且已添加到物件內容,但尚未調用 

  2.2  Deleted:對象已從物件內容中刪除

  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) 
   {
     Product  entity = new Product{Id =1}
     ctx.Attach(entity); ctx.ObjectStateManager.ChangeObjectState(entity,EntityState.Deleted)
     ctx.SaveChange();
    }
}
//前面說了EF是根據主鍵ID來處理的所以只要手動產生一個對象並把對應的ID賦值然後Attach到上下文中即可做到刪除
複製代碼


相比項目中原來的方法,用Attach後對資料庫的操作相應減少一次,效能上會有較大提升!

EF 的Attach方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.