天天看點

EF Attatch()方法附加對象

一、在EF中Attatch()方法用于将實體對象附加到資料庫上線文

注:Attach()的附加是“無狀态”的附加,需要使用Entry()方法擷取配置DbEntityEntry的State操作狀态,不然是無效的。

//
        // 摘要:
        //     将給定實體附加到集的基礎上下文中。也就是說,将實體以“未更改”的狀态放置到上下文中,就好像從資料庫讀取了該實體一樣。
        //
        // 參數:
        //   entity:
        //     要附加的實體。
        public virtual TEntity Attach(TEntity entity);
           

可用的EntityState狀态:

這五種狀态分别是:Detached-遊離;UnChanged-沒有變化;Added-添加;Deleted-删除;Modified-編輯。

Detached狀态下的Entity不會被上下文(context)所捕獲(track)。

當SavaChanged()方法執行期間,他會檢視目前Entity的EntityState的值,決定是去新增(Added)、修改(Modified)、删除(Deleted)、什麼也不做(UnChanged)。

二、使用EF 修改非資料庫查詢出的對象,方式如下:

TestOne _Context = new DBA.TestOne();

//EF 修改 非資料庫查詢出來的對象
Student stu = new Student()
{
    StuID = 3,
    StuName = "測試修改"
};
//以“未修改”狀态附加實體到上下文
_Context.Students.Attach(stu);
//修改實體為“已修改”狀态
_Context.Entry(stu).State = System.Data.Entity.EntityState.Modified;

int count = _Context.SaveChanges();
Console.WriteLine(count);
           

更多:

EF批量操作資料之EntityFramework.Extended

EF 彙總函數使用注意事項Max()/Min()等

EF中檢視上下文執行的Sql語句