0

我有這樣一個模型:實體框架 - 延遲加載,加載子實體問題

用戶=>模式=>模塊=>治療

(用戶對個人資料,個人資料有許多模塊,一個模塊有許多treatement)

這種模式是通過反向實體Framwork代碼首先

,當我用這個,在一個簡單的ASMX文件,要求一個用戶engineeed,我得到這個錯誤:

A circular reference was detected while serializing an object of type 'CDU.Entities.Models.User'. 

,這是因爲配置文件實體contrains具有其pofiles用戶的列表...等

在我的數據上下文,我禁用了延遲加載,它似乎確定進行身份驗證,在我的檢索用戶個人資料,我有個人資料ID,但個人資料實體未加載。

  this.Configuration.LazyLoadingEnabled = false; 

太棒了!

一旦認證,我必須建立用戶菜單的基礎上,在他的個人資料模塊和treatements。

,所以我問對象加載配置文件:

 User user = new User(); 
     using (cduContext db = new cduContext()) 
     { 
      string encryptedPassword = Encryption.Encrypt(password); 
      user = (from u in db.Users 
        where u.UserName.Equals(login) && 
          u.Password.Equals(encryptedPassword) 
        select u).FirstOrDefault(); 
      // Including the user's Profile 
      user = db.Users.Include("Profile").FirstOrDefault(); 
     } 
     return user; 

配置文件被加載,但他的子實體過,例如此配置文件的用戶列表!

,然後,我很享受了同樣的錯誤:

A circular reference was detected while serializing an object of type 'CDU.Entities.Models.User'. 

爲什麼曲線是「懶加載」?

我需要包括點播這些實體... 我怎樣才能取悅?

回答

0

嘗試獲取配置文件;

profile = (from p in db.Profiles 
       where p.User.UserName.Equals(login) && 
         p.User.Password.Equals(encryptedPassword) 
       select p).FirstOrDefault(); 
+0

嗨基爾斯滕克, 不工作,包括被applyed到實體... 用戶=(從u在db.Users 其中u.UserName.Equals(登錄)&& u.Password.Equals(encryptedPassword) 選擇U).//你不能使用包含在這裏!包括( 「檔案」)FirstOrDefault()。 – albarmat 2013-03-18 14:13:26

+1

你應該把'.INCLUDE(「檔案」)''的db.Users' – 2013-03-18 14:19:44

+0

由於延之後,我編輯 – 2013-03-18 14:25:44