一、在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語句