發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
在 Entity Framework 簡單查詢操作 中主要是學(xué)習(xí)了在Entity Framework中的幾種不同模式的查詢操作,現(xiàn)在主要來學(xué)習(xí)一下簡單的增加、刪除、修改操作。
增加
在EF中添加操作一般有兩種方式:一是直接創(chuàng)建對象,然后調(diào)用“DbSet”的”Add()”方法進(jìn)行添加;二是調(diào)用數(shù)據(jù)庫上下文的”Entry()”方法并設(shè)置對應(yīng)的狀態(tài)。無論使用哪種方式最終一定要調(diào)用“SaveChange()”進(jìn)行提交。如:
using (var db = new EFContext()) { var stephen = new Person { PersonName="aehyok0001", Age=25, Address="深圳南山", Email="aehyok@163.com" }; db.Persons.Add(stephen); var jeffrey = new Person { PersonName = "aehyok0002", Age = 25, Address = "深圳寶安", Email = "Leo@163.com" }; db.Entry(jeffrey).State = EntityState.Added; db.SaveChanges(); }
執(zhí)行后效果如下
此外,在含有導(dǎo)航屬性時,將一個對象賦值給另一個對象的導(dǎo)航屬性也能達(dá)到添加的效果(當(dāng)導(dǎo)航屬性為”DbSet“集合時通過調(diào)用導(dǎo)航屬性的“Add()“方法也同樣可以達(dá)到添加效果)。
狀態(tài)跟蹤
在這里我們需要強(qiáng)調(diào)一點那就是狀態(tài)跟蹤,對于上面的操作如果我們調(diào)用“Attach()”方法對實體進(jìn)行跟蹤或者設(shè)置實體的狀態(tài)那么數(shù)據(jù)將不會保存到數(shù)據(jù)庫:
這兩句添加任何一句效果都是一樣的,就是都沒有保存到數(shù)據(jù)庫中。
使用”Attach()”方法進(jìn)行實體跟蹤時會設(shè)置實體的狀態(tài)為“Unchanged”此時實體處于未修改狀態(tài),當(dāng)執(zhí)行“SaveChange()”方法時EF不會執(zhí)行修改操作。相反如果此時設(shè)置實體狀態(tài)為“Modified”則EF執(zhí)行更新操作。那么既然EF的數(shù)據(jù)修改操作(增加、更新、刪除)是根據(jù)實體狀態(tài)而進(jìn)行的,那么為什么之前我們的增加操作能正常進(jìn)行而不用手動修改其狀態(tài)呢?原因是EF會自動發(fā)現(xiàn)狀態(tài)改變,在調(diào)用下面的方法時狀態(tài)發(fā)現(xiàn)是自動的:
當(dāng)然,并不是所有的時候我們都需要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(); }
當(dāng)然有了上面狀態(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(); }
上面兩種方法都會達(dá)到刪除的目的。
修改
修改數(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)建新紀(jì)錄,需要創(chuàng)建相應(yīng)實體類的新實例,填充字段,把實體類加入 ObjectContext 派生類維護(hù)的 EntityCollection,然后調(diào)用 SaveChanges()寫入新紀(jì)錄:注意:Entity Framework 不會刪...
在Entity Framework中使用存儲過程(三):邏輯刪除的實現(xiàn)與自增長列值返回
打開VS,通過導(dǎo)入該數(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...
微信掃碼,在手機(jī)上查看選中內(nèi)容