实体框架 - 延迟加载,加载子实体问题

时间:2013-03-18 13:56:48

标签: entity-framework linq-to-sql linq-to-entities reverse-engineering

我有这样的模型:

用户=>个人资料=> modules =>治疗

(用户具有配置文件,配置文件有许多模块,模块有很多处理)

此模型由Entity Framwork代码首先反向引入

当我使用它时,在一个简单的asmx文件中,要求用户,我有这个错误:

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

这是因为个人资料实体禁止拥有其个人信息等的用户列表

在我的数据上下文中,我在我检索到的用户配置文件中禁用了延迟加载,它似乎没有用于身份验证,我有配置文件ID,但未加载配置文件实体。

            this.Configuration.LazyLoadingEnabled = false;

大!

经过身份验证后,我必须根据他个人资料中的模块和处理来构建用户菜单。

所以我要求对象加载配置文件:

        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'.

为什么个人资料是“延迟加载”?

我需要按需包含这些实体...... 我怎么能取悦?

1 个答案:

答案 0 :(得分:0)

尝试获取个人资料。

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