前言 這幾天在偵錯EntityFramework時都會看到Entity的型別為Entity+編碼後的DynamicProxy類別,好奇的去找一些文章來瞭解它到底有什麼作用。 優點 1.在Lazy Loading=true,可以讓導覽屬性延緩載入 例:RoleEntity底下有一個ICollection<User>屬性。 2.用來追蹤變更資訊-->這點我找不到要用在哪及如何使用,找到的說明好像也是.net4.5前才有一些ObjectStateManager的應用..。 缺點 1.WebAPI序列化會發生失敗。 2.無法在分散式架構快取。 3.取用導覽屬性時若一開始忘了下Include(),而在foreach又取導覽屬性的資料,會造成大量的查詢次數 ps:這點我還常犯=.= foreach (var role in roleList) { foreach (var user in role.SYSUSER) { } } 將ProxyCreationEnable設為false有何影響? 1.若要取用導覽屬性的資料需自行下Include()。 2.Lazy Loading無法使用。 Ps:不知還有沒有其他潛在問題 針對自己在使用上的疑慮作了以下簡單測試 1.IQueryable to List後才執行查詢-->Yes 2.Include()是否取得到導覽屬性-->Yes,導覽屬性會使用join的查詢方式,一次載入 3.Entity的異動是否可以更新-->Yes 4.導覽屬性的集合資料是否可以刪除,例:將某一使用者從角色中移除—>ok static void Main(string[] args) { using (MyEntities db = new MyEntities()) { db.Configuration.ProxyCreationE