循环引用:asmx +实体框架+ Javascript

时间:2013-03-21 13:49:25

标签: javascript web-services entity-framework linq-to-sql asmx

我有一个这样设计的模型: 用户=>个人资料=> modules =>治疗

此模型由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'.

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

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

            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;

有没有办法在配置文件中禁用此“用户列表”的序列化! 请帮助......

0 个答案:

没有答案