2011-11-02 8 views
5

アイブ氏は、JSONオブジェクトにEFのエンティティを変換するときに循環参照に関するいくつかの問題を抱えて。私は私の作品解決策を発見した、しかし、私はイムは、最初のものは取得するのに十分であるように思わEFエンティティをセラー化する。プロキシ作成とレイジーロードを無効にしますか?

context.ContextOptions.ProxyCreationEnabled = false; 

および/または

context.ContextOptions.LazyLoadingEnabled = false; 

を追加するときに実際に何が起こっているのか知りたいのですが一次元のjsonオブジェクトです。私は両方を使うべきですか?そして、彼らは実際に何をしていますか?これの周りにはよりスマートな方法がありますか?おかげ

+0

を持っている子供をシリアル化しようとはしません親をシリアル化するとき、私はあなたがそこにこのための具体的な理由をJavaScriptSerializer..isを使用しているあなたの最後のポストから気づきましたか?これはWebアプリケーション用ですか? DataContractJsonSerializerやJson.NETライブラリなど、jsonを入手するには別のアプローチをとるべきだと思います。 –

+0

@SeanThoman私はjson.netを使ってみましたが、依然として循環参照例外があります。これは、通常のasp.net 4.0 Webフォームアプリです。 DataContractJsonSerializerを使用した例はありますか? – Johan

答えて

6

最初の行は、あなたのエンティティクラスから継承したクラスのランタイムの生成をオフにします。このクラスは実際に実行時に使用されます。あなたのクラスではありません。このランタイム生成クラスはおそらくSerializableではないため、この行(プロキシ生成をオフにする)によってシリアル化が機能します。

2行目では、遅延ロードをオフにします。それで、親エンティティと子エンティティがあるとしましょう。あなたがParentを求めているときに、遅延読み込みがオンになっているときには、子を読み込まない。あなたがParentをロードするたびに、それがオフになっていると、その子をすべてロードします。私は、これがEFを使用している場合に慣れるべきものだと思います。

編集: 循環参照に問題がある場合は、あなたが遅延ロードをオフにする必要があります。あなたが親への参照(循環参照を作成する)

+0

しかし、怠惰な読み込みを無効にする必要がありますか? – Johan

+0

あなたが言ったように。一行で十分です。 –

+0

そうですね、レイジーローディングを無効にするだけで十分である理由は分かりません。他のエンティティとの関係を削除する必要がありますか? – Johan

関連する問題