1

私はファウリングモデルを持っています:

public class Order 
{ 
    public int OrderId { get; set; } 
    //
    public virtual ICollection<Client> Clients { get; set; } 
} 

public class Client 
{ 
    public int ClientId { get; set; } 
    public string ClientName { get; set; } 
    public virtual Order Order { get; set; } 
} 

EF scaffolding API コントローラーを生成して Web Api を使用すると、機能しませんでした。エラーは以下のとおりです。

Self referencing loop detected for property 'Order' with type 
'System.Data.Entity.DynamicProxies.Order_A97AC61AD05BA6A886755C779FD3F96E86FE903ED7C9BA9400E79162C11BA719'. 
Path '[0].Order[0]'

誰でも問題を解決するのを手伝ってもらえますか?

4

1 に答える 1

3

シリアライザーは循環参照を処理できません。データ コンテキスト クラスで無効にできます。

public YourDbContext() : base("name=YourConnectionString") 
 { 
     Database.SetInitializer(new CircularReferenceDataInitializer()); 
     this.Configuration.LazyLoadingEnabled = false; 
     this.Configuration.ProxyCreationEnabled = false; 
 } 

このように、ナビゲーション プロパティは遅延読み込みされません。遅延読み込みを使用する場合は、次のことを試すことができます。

1) 循環参照を無視して対処する。以下のコードを WebApiConfig.cs ファイルに追加します。

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

2) WebApiConfig.cs ファイルに以下のコードを追加して、循環参照を保持します。

 config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize; 
 config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;

それが役に立てば幸い。

于 2013-11-09T21:19:15.753 に答える