エンティティオブジェクトをJSON文字列に変換しようとしたときに次のエラーが発生しました。コードファーストDB設計でC#MVC4を使用しています。 FKとテーブル間の関係によってこの問題が発生するため、この問題が発生します。回避策は何ですか?
タイプSystem.Data.Entity.DynamicProxies.Userのオブジェクトのシリアル化中に循環参照が検出されました
私のコードは
User ma = db.user.First(x => x.u_id == id);
return Json(ma, JsonRequestBehavior.AllowGet);
それは子オブジェクトをロードしようとしているため、終了しない循環ループを作成している可能性があるためです(a => b、b => c、c => d、d => a)
次のように、その特定の瞬間にのみオフにすることができます。したがって、オブジェクトでIncludeメソッドが呼び出されない限り、dbcontextは顧客の子オブジェクトをロードしません。
db.Configuration.ProxyCreationEnabled = false;
User ma = db.user.First(x => x.u_id == id);
return Json(ma, JsonRequestBehavior.AllowGet);
私の問題はこれを使用して解決されます:
//initialize model db
testdbEntities dc = new testdbEntities();
//get employee details
List<Employee1> lst = dc.Employee1.ToList();
//selecting the desired columns
var subCategoryToReturn = lst.Select(S => new {
Employee_Id = S.Employee_Id,
First_Name = S.First_Name,
Last_Name = S.Last_Name,
Manager_Id = S.Manager_Id
});
//returning JSON
return this.Json(subCategoryToReturn , JsonRequestBehavior.AllowGet);
私は同じ問題を抱えていましたが、私の場合、表示するのに必要な列のみが渡されました。 2つだけ。
List<SubCategory> lstSubCategory = GetSubCateroy() // list from repo
var subCategoryToReturn = lstSubCategory.Select(S => new { Id = S.Id, Name = S.Name });
return this.Json(subCategoryToReturn , JsonRequestBehavior.AllowGet);
クエリの内容を保持するクラスを作成してみませんか?それは私のために働いた
子オブジェクトをロードしようとしていますが、終了しない循環ループプロパティが作成されている可能性があります。
また、あなたは[ScriptIgnore]を使用し、これを見てパブリックプロパティまたはパブリックフィールドをシリアル化しません:
public class BookingHotel : IntBaseEntity
{
public string BookingName { get; set; }
public string BookingReference { get; set; }
public DateTime? CheckInDate { get; set; }
public DateTime? CheckOutDate { get; set; }
public int HotelId { get; set; }
[ScriptIgnore]
public Hotel Hotel { get; set; }
}