1

私はこの方法で設計されたモデルを持っています: ユーザー => プロファイル => モジュール => 治療

このモデルは、最初に Entity Framwork コード (SQL SERVER DATABASE) によってリバース エンジニアリングされます。

エンティティ - マッピング ...などは、個別の dll にあります。

私のエンティティを取得し、共通パラメータのリストをアプリケーションに返す asmx を使用しています。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
[Serializable]
public class WsMaster 
{

    public WsMaster()
    {

    }
    [WebMethod(EnableSession = true)]
    public List<object> GetCommonParameters()
    {
        List<object> list = new List<object>();
        try
        {
            CultureInfo culture = (CultureInfo)Session["UserCulture"];
            User user = CDU.Bll.CduBLL.getUser((int)Session["userId"]);
            CommonParameters CommonParameters = new CommonParameters(user,culture);
            list.Add((object)new CommonLabels(culture));
            list.Add(user);
        }
        catch (Exception exp)
        {
            HandleException(exp);
        }
        return list;

    }
}

私のaspxページでは、このサービスを参照しました:

        <asp:ServiceReference Path="~/Business/Administration/WsMaster.asmx" />

次に、Javascript から直接サービスを呼び出します。

 WsMaster.GetCommonParameters(showCDUPageSuccess, showCDUPageFailure);

このエラーが発生しました

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

これは、オブジェクト user に profile が含まれているためです。これには、ユーザーのリストが含まれています ...etc

Entity Framework の遅延読み込みを無効にしました:

            this.Configuration.LazyLoadingEnabled = false;

そしてオンデマンドでロードしたい:

User user = new User();
        using (cduContext db = new cduContext())
        {
            user = (from u in db.Users.Include("Profile")
                    where u.Id==Id
                    select u).FirstOrDefault();

        }

プロファイルには、ユーザーのリストが含まれています ... 、同じエラーが発生しました。ユーザーのプロファイルのリストを null に設定することでこれを解決しました。

user.Profile.Users = null;

プロファイルでこの「ユーザー リスト」のシリアル化を無効にする方法はありますか!? 助けてください ...

4

0 に答える 0