2011-03-02 7 views
0

私は2つのテーブルを持っています(データベースにはもっと多くのテーブルがありますが、ここでは2つしかテーブルにはありません)。
アカウントとAccountStatusでは、アカウントはAccountStatus(アクティブ、非アクティブなど)を持つことができます。プロパティを設定すると、Entityフレームワークがdbからデータをロードするのはなぜですか?

私は新しいアカウントを作成し、プロパティのカップルを設定するが、私はこのコードに到達したとき:
1. VARステータス= db.AccountStatuses.SingleOrDefault(S => s.ID ==(ロング)AccountStatusEnum.Active) ;
2. account.AccountStatus = status;
3. db.Accounts.AddObject(account);
最初の行は正常に実行されますが、2行目に到達するとかなり長い時間がかかります。コードにステップインすると、データベースからすべての単一のアカウントがロードされているようです。

なぜすべてのアカウントをロードする必要があるのか​​わかりません。
Entity Framework 4とPocoを使用しており、遅延読み込みを有効にしています。

提案がありますか?
乾杯
/ジミー

+1

を使用すると、アカウント作成の全コードを表示することができますか? –

+0

アカウント作成はそれほど魅力的ではありません;) これは上に掲載されたコードの直前の行です。 var account =新しいアカウント(); account.SourceSystemClientID = ""; account.AccountNumber = "..."; account.ModificationDate = DateTime.Now; account.LastModifiedBy = "Customer"; account.CreationDate = DateTime.Now; –

答えて

2

あなたは、いくつかのセット全体とフィルタあとがきに引っ張ってくるように、データをフェッチするために使用して構築した注意する必要があります。 (脇に:長い時間の遅延は、データベースが作成され、シードされている可能性があります。すでにデータベースが存在しない場合は、最初にデータベースに触れたときに発生します。ある種のクエリを使用する可能性があります。実際には、コンパイルされたクエリに何が含まれているかは、そのクエリと対話するまで評価されません)。

は、代わりにこのフォームを試してみて、あなたは同じ問題がある場合は以下を参照してください

var status = db.AccountStatuses.Where(s => s.ID == (long)AccountStatusEnum.Active); 
+0

これらのタイプの問題(予期したよりも多くのデータが読み込まれている)に驚くようなことを防ぐ良い方法は、遅延読み込みを無効にして、*明示的にロードするものだけが読み込まれるようにすることです。 –

+0

AccountStatusプロパティを設定しているだけなので、ロードすることは奇妙なことではありません(私はすべてのアカウントだと思っていますが、すべてのアカウントであることを実際に検証していません)。 –

+0

私はdb.ContextOptions.LazyLoadingEnabled = falseを指定して更新を行ったコンテキストでLazyloadingを無効にしました。 –

関連する問題