實(shí)體類創(chuàng)建后在方法中對(duì)哪些屬性賦值了,傳遞到底層方法時(shí)在底層如何得知哪些屬性被賦值過。如何監(jiān)控屬性的更改,請(qǐng)看腦洞大開之《大花貓動(dòng)了哪些小玩具》——記屬性監(jiān)控之曲線救國。
在使用EF更新數(shù)據(jù)庫實(shí)體時(shí)。很多時(shí)候我們想要的只是更新表中的某一個(gè)或部分字段。雖然可以通過設(shè)置來告訴上下文我們要更新的字段。但是一般我們都會(huì)把數(shù)據(jù)持久層封裝起來。通過泛型操作。而這時(shí)我們就無法得知應(yīng)用層面修改了哪些字段了。
最近也在學(xué)習(xí)EF,就正好遇到了這個(gè)問題。當(dāng)然,如果直接在應(yīng)用層面使用,通過設(shè)置字段的IsModified狀態(tài)就可以了。如下
db.Entry(model).Property(x => x.Token).IsModified = false;
可是,這僅限于學(xué)習(xí)和demo。正式開發(fā)中一般是不會(huì)把這種底層操作公開給應(yīng)用層面的。都會(huì)把數(shù)據(jù)庫持久層進(jìn)行封裝。然后通過實(shí)體工廠(倉庫)加實(shí)體泛型的方式提供增刪改查。
具體的可以參考《基于Entity Framework的Repository模式設(shè)計(jì)》之類的文章。
這類方式都有一個(gè)共同點(diǎn),更新和刪除的時(shí)候都有如下類似代碼: