[英]How do I create a read only entity in the entity framework?
我正在使用ADO.NET MVC和實體框架從數據庫中加載相關實體的圖形。 其中一個實體需要在內存中進行修改,但是當圖中的其他實體發生更改時,這些更改就不會持久化回數據庫。
目前,我嘗試使用MergeOption.NoTracking和MergeOption.OverwriteChanges,但它們似乎都被忽略了,並且實體集中的任何不應該修改的更改都將持久保存到存儲中。
下面給出了用於從數據庫加載實體圖的代碼片段:
QuizDBEntities entities = new QuizDBEntities();
ObjectParameter[] searchParameters = { new ObjectParameter("contestantID", contestantID) };
entities.QuestionSet.MergeOption = MergeOption.NoTracking;
var query = entities.ContestantSet
.Include("Quiz.Questions.Categories.Options.Answer")
.Include("Answers")
.Include("Quiz.Questions.Filters.FilterAnswers")
.Where("it.ContestantID == @constestantID", searchParameters);
Contestant contestant = query.First();
我還嘗試在構造查詢之后但執行之前設置MergeOption。
任何幫助將不勝感激。
您遇到的問題的本質在於EF處理關系的方式。 在EF中,關系是實體的一等成員。 這就是為什么您要檢索的對象圖實際上是實體和關系的集合。 對象上下文內部的所有實體和關系都連接到對象上下文,或者斷開連接。 那就是實體框架的“白金規則” :
當我第一次注意到即使沒有在代碼中明確要求將實體附加到ObjectContext時,我還是有些吃驚,因為我相信實體框架不會破壞我所認為的“黃金法則”:也就是說,它不會做我沒有明確要求做的任何事情。 一旦我理解了為什么在將實體附加到圖形時將實體自動附加到上下文的原因以及為什么這樣做是必要的,我就確定這必須是實體框架的白金規則,因為它否決了黃金規則。
Juile Lerman,編程實體框架
“黃金法則”說,EF永遠不會做您未明確要求做的事情。
因此,“只讀”實體是分離實體。 您可以像以前一樣實現它。 或者,如果您在ObjectContext上調用Detach方法。 對象圖中的實體可以附加或與ObjectContext分離。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.