2013-07-18 31 views
0

我有兩個具有多對多關係的實體。當我使用Include()加載一個實體時,它會加載子項,並且還包括子項的子項。我不想要孫子女。防止包含實體的子對象的加載(停止自引用循環)

我關閉了懶加載:LazyLoadingEnabled = false;和我忽略自參照循環:我使用的是IUnitOfWork pattern(請參閱創建一個通用存儲庫),所以這樣加載實體

public class A 
{ 
    public int Id { get; set; } 
    public ICollection<B> Bs { get; set; } 
} 

public class B 
{ 
    public int Id { get; set; } 
    public ICollection<A> As { get; set; } 
} 

return unitOfWork.ARepository.Get(a => a.Id == Id, null, "Bs"); 

config.Formatters.JsonFormatter.SerializerSettings 
    .ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling 
    .Ignore; 

爲了更好地解釋事

我找回像這樣的JSON:

[ 
    { 
    "Id": 1, 
    "Bs": [ 
     { 
      "Id": 1, 
      "As": [ 
       { 
       "Id": 2, 
       "Bs": [ 

      ... 

    }, 
    { 
    "Id": 2, 
    "Bs": [ 
     { 
      "Id": 1, 
      "As": [ 
       { 
       "Id": 1, 
       "Bs": [ 

     ... 

傳遞自引用實體看起來非常浪費。有什麼辦法可以防止這種情況發生?

回答

0

我加入了Newtonsoft.Json.JsonIgnoreAttribute到作爲財產類B.

public class B 
{ 
    public int Id { get; set; } 
    [JsonIgnore]  
    public ICollection<A> As { get; set; } 
} 

我相信它是安全的這樣做,因爲我不會引用的類通過B.這種關係是存在的EF代碼第一。

要使用[JsonIgnore]使用的NuGet(https://nuget.org/packages/newtonsoft.json/)安裝:

PM> Install-Package Newtonsoft.Json