私はEF 4.1 Database Firstアプローチを使用しています。T4テンプレートは、別のアセンブリでPOCOクラスを生成しています。私は、データを取得するためのリポジトリと、UIとの通信に使用されるサービス層を持っています。EF 4.1 + MVC + JSON循環参照例外のための最善の解決策はありますか?
私はドロップダウンをカスケード接続しようとしていました。 MVCとEF 4.1で新しくなったので、可能なソリューションについてはstackoverflowを検索しました。
これはサンプルのviewmodelクラスです:
public class MyViewModel
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public IEnumerable<Phone> Phones { get; set; }
}
私がこれまで読んだことが何、解決策は以下のとおりです。 参照性質上 System.Web.Script.Serialization
で
使用
ScriptIgnoreAttribute
- 私は本当に しません私は System.Web私のPOCOプロジェクトへの参照を追加したくないので、これをしたいEF 4.1 DbContextで無効に遅延ロードは - 私はわからないんだけど、私が使用したいんでは徹底した私のプロジェクト
戻る匿名型を含める - 私のプロジェクトは、大なるとき、私は、このアプローチに問題があるのだろうか?
ViewModelを使用する - 1台以上の電話機を持つことができるカスタマーがいるとします。最初のドロップダウンリストでCustomerを選択し、2番目のドロップダウンですべての電話機を表示します。
これは私のPhonesオブジェクトに対して循環例外を生成しませんか?それとも、私のPhoneオブジェクトのための特別なクラスを作るだろうか?それは不必要なコードのように思える。AutoMapperを使用する - AutoMapperの使用経験がないため、どれほど複雑かわかりません。
あなたはどちらを投票しますか?なぜですか?
サンプルクラスをビューモデルとして使用できますか? Phoneエンティティ(EF 4.1から生成されたPOCO)に循環参照のシリアル化の問題がありますか。 –
@MarkoTošićさん、あなたのドメインモデル(電話)への参照が含まれているので、ビューモデルではありません。ハイブリッドなので、このPhoneクラス自体が他のドメインモデルへの参照を持っていれば、すぐに同じ問題が発生します。これをしないでください。純粋なビューモデルクラスを定義します。 –
私はPhone ModelオブジェクトクラスのDTO PhoneDTOクラスを定義してから、私のViewModelにIEnumerableというプロパティを設定する必要がありますか? 私は「より簡単な」解決策を見つけようとしていましたが、結局のところ、これは正しいアプローチのようです。 P.P.私は投票のために十分な担当者を持っていません。 –