私はこの方法で設計されたモデルを持っています: ユーザー => プロファイル => モジュール => 治療
このモデルは、最初に 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;
プロファイルでこの「ユーザー リスト」のシリアル化を無効にする方法はありますか!? 助けてください ...