1

我有一个这样设计的模型:用户 => 配置文件 => 模块 => 治疗

该模型首先由实体框架代码进行逆向工程(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'.

这是因为对象用户包含一个配置文件,其中包含一个用户列表......等等

我禁用了实体框架的延迟加载:

            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