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