0

私はこのようにモデルを持っています:

ユーザー=>プロファイル=>モジュール=>治療

(ユーザーにはプロファイルがあり、プロファイルには多くのモジュールがあり、モジュールには多くの処理があります)

このモデルは、最初にエンティティフレームワークコードによってリバースエンジニアリングされます

これを単純なasmxファイルで使用してユーザーを要求すると、次のエラーが発生します。

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

これは、プロファイルエンティティがpofileを持っているユーザーのリストを制限しているためです...など。

私のデータコンテキストでは、遅延読み込みを無効にしました。認証はOKのようです。取得したユーザーのプロファイルには、プロファイル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'.

プロファイルが「遅延読み込み」である理由

これらのエンティティをオンデマンドで含める必要があります...どうすればよいですか?

4

1 に答える 1

0

代わりにプロファイルを取得してみてください。

  profile = (from p in db.Profiles 
                where p.User.UserName.Equals(login) &&
                      p.User.Password.Equals(encryptedPassword)
                select p).FirstOrDefault();
于 2013-03-18T14:08:14.500 に答える