ASP.Net環境でLINQtoSQLを何年も使用しています。UI層とBLL層はWebサービスによって分離されていたため、遅延読み込み、変更の追跡などはオプションではありませんでした。コードで何が起こっているのかを正確に知っていたので、ある意味で良かったです-BLLの変更を永続化する責任があり(エンティティが新規/更新されたかどうかを判断する)、遅延による予期しない驚きはありませんでした-どこかで読み込みが行われています。
私は今、仕事を移し、新しいデスクトップシステム(WPF)に取り組んでいます。境界はありません。つまり、UI層は直接BLLを呼び出します(ただし、最後の警告を参照してください)。EF5を使いたいのですが、EFが提供する機能やオプションなどの数に少し圧倒されます。私はいくつかの質問への答えを得ることができることを望んでいます...
遅延読み込みは境界を越えて使用する必要がありますか?顧客とそのすべての注文を表示したいとします。UIはBLLから顧客だけを要求し、遅延読み込みを使用して注文にアクセスしますか?UIでこれを行うのは、私には正しく感じられません。遅延読み込みは、BLLで使用するものにすぎないと思います。
を使用して遅延読み込みをオフにできると思いますが
DbContext.Configuration.LazyLoadingEnabled
、BLLで遅延読み込みを使用したいのですが、エンティティをUIに戻すときに、UIに遅延読み込みを行わせたくない場合はどうすればよいですか?変更追跡、自己追跡エンティティ、およびPOCOについてはどうですか?いつ何を使うべきですか?LINQ to SQLを使用したときは、問題にはなりませんでした(WebサービスとASP.Netにまたがっていたため、「状態」がなかったため、変更の追跡は関係ありませんでした)。すべてを非アクティブ化したいと思いますが(これは私が慣れていることです)、EFの「良さ」の一部を見逃してしまうのではないかと心配しています。永続化するデータを管理できないのではないかと心配しています。
EFを使用してデータを試したり取得したりしていると、エンティティ階層の一部で、一部のプロパティコレクション(customer.Ordersなど)に「プロキシ」エンティティが含まれていることに気付きました。これらは何で、いつ役立つのでしょうか?
繰り返しますが、を介してプロキシをオフにできることに気づきました
DbContext.Configuration.ProxyCreationEnabled
が、ドキュメントには、それ以上のものがあり、LazyLoadingEnabled設定と何らかの関係があることが示されていますか?EF「コードファースト」の人気が高まっているようです。それはあなたに何を与えますか?私はSSMSでデータベースを設計することに慣れており、多くのクラスやアノテーションなどを作成することはありません。
最後の注意点-アプリのUI層はBLLのメソッドを直接呼び出していますが、将来、それらを分離したい可能性がわずかにあります(たとえば、Webサービスを介して)。これは、設計上の考慮事項、および上記で提起したいくつかの質問にどのように影響しますか?
たくさんの質問をまとめてしまったことをお詫びします。私がそれらすべてに答えを得ることができれば、うまくいけば、これは将来の私の状況で他の人に役立つでしょう。