發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導圖
隨筆
相冊
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
在 Entity Framework 簡單查詢操作 中主要是學習了在Entity Framework中的幾種不同模式的查詢操作,現(xiàn)在主要來學習一下簡單的增加,、刪除,、修改操作,。
增加
在EF中添加操作一般有兩種方式:一是直接創(chuàng)建對象,,然后調(diào)用“DbSet”的”Add()”方法進行添加,;二是調(diào)用數(shù)據(jù)庫上下文的”Entry()”方法并設(shè)置對應(yīng)的狀態(tài),。無論使用哪種方式最終一定要調(diào)用“SaveChange()”進行提交,。如:
using (var db = new EFContext()) { var stephen = new Person { PersonName="aehyok0001", Age=25, Address="深圳南山", Email="[email protected]" }; db.Persons.Add(stephen); var jeffrey = new Person { PersonName = "aehyok0002", Age = 25, Address = "深圳寶安", Email = "[email protected]" }; db.Entry(jeffrey).State = EntityState.Added; db.SaveChanges(); }
執(zhí)行后效果如下
此外,,在含有導航屬性時,將一個對象賦值給另一個對象的導航屬性也能達到添加的效果(當導航屬性為”DbSet“集合時通過調(diào)用導航屬性的“Add()“方法也同樣可以達到添加效果),。
狀態(tài)跟蹤
在這里我們需要強調(diào)一點那就是狀態(tài)跟蹤,,對于上面的操作如果我們調(diào)用“Attach()”方法對實體進行跟蹤或者設(shè)置實體的狀態(tài)那么數(shù)據(jù)將不會保存到數(shù)據(jù)庫:
這兩句添加任何一句效果都是一樣的,就是都沒有保存到數(shù)據(jù)庫中,。
使用”Attach()”方法進行實體跟蹤時會設(shè)置實體的狀態(tài)為“Unchanged”此時實體處于未修改狀態(tài),,當執(zhí)行“SaveChange()”方法時EF不會執(zhí)行修改操作。相反如果此時設(shè)置實體狀態(tài)為“Modified”則EF執(zhí)行更新操作,。那么既然EF的數(shù)據(jù)修改操作(增加,、更新、刪除)是根據(jù)實體狀態(tài)而進行的,,那么為什么之前我們的增加操作能正常進行而不用手動修改其狀態(tài)呢,?原因是EF會自動發(fā)現(xiàn)狀態(tài)改變,在調(diào)用下面的方法時狀態(tài)發(fā)現(xiàn)是自動的:
當然,,并不是所有的時候我們都需要EF自動發(fā)現(xiàn)狀態(tài)改變,,設(shè)置 “DbContext.Configuration.AutoDetectChangesEnabled”屬性為“false”可以禁用自動發(fā)現(xiàn)功能。
刪除
現(xiàn)在來看一下Entity Framework的刪除操作
using (var db = new EFContext()) { var person = db.Persons.Where(m => m.PersonId == 4).FirstOrDefault(); db.Persons.Remove(person); db.SaveChanges(); }
當然有了上面狀態(tài)跟蹤的討論相信大家也可以想到如下刪除方法:
using (var db = new EFContext()) { var person = db.Persons.Where(m => m.PersonId == 5).FirstOrDefault(); db.Entry(person).State = EntityState.Deleted; db.SaveChanges(); }
上面兩種方法都會達到刪除的目的,。
修改
修改數(shù)據(jù)很簡單,,直接修改對應(yīng)的屬性即可:
using (var db = new EFContext()) { var person = db.Persons.Where(m => m.PersonId == 3).FirstOrDefault(); person.PersonName="UpdateNewName"; db.SaveChanges(); }
需要說明的是,EF在執(zhí)行修改操作前會檢查哪些屬性發(fā)生了變化,并且只會修改發(fā)生變化的字段。
來自: 昵稱10504424 > 《工作》
0條評論
發(fā)表
請遵守用戶 評論公約
Entity Framework中的批量提交與分布式事務(wù)處理
Entity Framework中的批量提交與分布式事務(wù)處理,。using (TransactionScope scope = new TransactionScope()){ //Do something with context1 //Do something with context2 //Save and discard c...
Entity Framework
Entity Framework Entity Framework Entity Framework 6:專家版本。EF6 中有許多這樣的功能:支持異步查詢和保存,、返回自定義 Code ...
InfoQ: 對Entity Framework應(yīng)用二級緩存
二級緩存(Second Level Caching)是個Entity Framework中尚不能開箱即用的功能,。在一篇MSDN文章“用Entity Framework和AppFabric實現(xiàn)二級緩存”中,Julie Lerman展示了如何通過在Entity Framework中利...
ADO.net,,Linq to SQL和Entity Framework性能實測分析
ADO.net,Linq to SQL和Entity Framework性能實測分析,。第一階段測試結(jié)果非常出人意料,,ADO.net和LINQ to SQL操作數(shù)據(jù)的時間都控制在0.5...
LINQ(數(shù)據(jù)庫操作增、刪,、改及并發(fā)管理)
為了在數(shù)據(jù)庫里創(chuàng)建新紀錄,,需要創(chuàng)建相應(yīng)實體類的新實例,填充字段,,把實體類加入 ObjectContext 派生類維護的 EntityCollection,,然后調(diào)用 SaveChanges()寫入新紀錄:注意:Entity Framework 不會刪...
在Entity Framework中使用存儲過程(三):邏輯刪除的實現(xiàn)與自增長列值返回
打開VS,通過導入該數(shù)據(jù)表和CUD存儲過程創(chuàng)建.edmx模型,,同時修改概念模型實體名稱(比如T_CONTACT改成Contact)和屬性名稱,。ID, contact...
ADO.NET Entity Framework 試水——并發(fā) - Saar - 博客園
提到數(shù)據(jù)庫操作,特別是企業(yè)級的數(shù)據(jù)庫應(yīng)用,,就不得不提一個多人操作時經(jīng)常會產(chǎn)生的問題——并發(fā)沖突,。本文首先來看一下什么是并發(fā)沖突...
Entity Framework Code First實現(xiàn)樂觀并發(fā)
Entity Framework Code First實現(xiàn)樂觀并發(fā)。為了測試Fluent API的配置,,從 Students 類的 RowVersion 屬性中刪除 [Timestamp] 屬性,,并在 EducationContext 類中覆蓋 ** onmodel()** 方法:UPDATE Stude...
MVC實體架構(gòu)設(shè)計(三)——EF-Code First(6):數(shù)據(jù)更新
MVC實體架構(gòu)設(shè)計(三)——EF-Code First(6):數(shù)據(jù)更新。public static void Update<TEntity>(this DbContext dbContext, Express...
微信掃碼,,在手機上查看選中內(nèi)容
微信掃碼,在手機上查看選中內(nèi)容