我有一个这样设计的模型:用户 => 配置文件 => 模块 => 治疗
该模型首先由实体框架代码进行逆向工程(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;
有什么方法可以在配置文件中禁用此“用户列表”的序列化!?请帮忙 ...