我有以下型號:EF加載虛擬導航屬性,而無需訪問
public class Category
{
public virtual ICollection<Product> Products{get;set;}
public Product()
{
Products = new HashSet<Product>();
}
}
public class Product
{
public Guid CategoryId{get;set;}
public virtual Category {get;set;}
}
現在如果我執行以下語句:
var list = await UoW.Categories.Query.Where(x=>x.Name.Contains("Mob")).ToListAsync();
,並返回list
爲JSON
從MVC控制器動作。它拋出以下異常:
A circular reference was detected while serializing an object of type
'System.Data.Entity.DynamicProxies.Category_7C2191CFExxxxxxx'.
它發生,因爲Products
集合不爲空,反過來每個Product
包含Category
。
虛擬財產自動上傳的原因是什麼?
編輯: - 原來Json序列化程序正在訪問的屬性,並導致EF加載它們。按照haim770的建議關閉LazyLoading
。
爲什麼不在'Product'類的'Category'屬性中應用''[NonSerialized,XmlIgnore]'並消除循環引用? –
可能重複的http://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4 – Anil